From f77a9d06c9b9f67a160d2853793af542a3c3ed15 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 16 Sep 2021 10:25:39 +0800 Subject: [PATCH 01/42] Enhance ClientProxyBase. --- .../Abp/Http/Client/AbpHttpClientModule.cs | 3 + .../ApiVersionInfo.cs | 2 +- .../Client/ClientProxying/ClientProxyBase.cs | 262 ++++++++++++++++- .../ClientProxyRequestContext.cs} | 6 +- .../ClientProxyRequestPayloadBuilder.cs} | 13 +- .../ClientProxyUrlBuilder.cs} | 25 +- .../DynamicHttpProxyInterceptor.cs | 45 ++- .../DynamicHttpProxyInterceptorClientProxy.cs | 9 + .../Http/Client/Proxying/HttpProxyExecuter.cs | 267 ------------------ .../Client/Proxying/IHttpProxyExecuter.cs | 12 - 10 files changed, 311 insertions(+), 333 deletions(-) rename framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/{Proxying => ClientProxying}/ApiVersionInfo.cs (92%) rename framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/{Proxying/HttpProxyExecuterContext.cs => ClientProxying/ClientProxyRequestContext.cs} (85%) rename framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/{Proxying/RequestPayloadBuilder.cs => ClientProxying/ClientProxyRequestPayloadBuilder.cs} (88%) rename framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/{Proxying/UrlBuilder.cs => ClientProxying/ClientProxyUrlBuilder.cs} (80%) create mode 100644 framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs delete mode 100644 framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpProxyExecuter.cs delete mode 100644 framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/IHttpProxyExecuter.cs diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs index c4d0d0d181..c72b99c819 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs @@ -5,6 +5,7 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; using Volo.Abp.Validation; using Volo.Abp.ExceptionHandling; +using Volo.Abp.Http.Client.DynamicProxying; namespace Volo.Abp.Http.Client { @@ -22,6 +23,8 @@ namespace Volo.Abp.Http.Client { var configuration = context.Services.GetConfiguration(); Configure(configuration); + + context.Services.AddTransient(typeof(DynamicHttpProxyInterceptorClientProxy<>)); } } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/ApiVersionInfo.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ApiVersionInfo.cs similarity index 92% rename from framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/ApiVersionInfo.cs rename to framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ApiVersionInfo.cs index d37de5d452..ecf2db7b9f 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/ApiVersionInfo.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ApiVersionInfo.cs @@ -1,6 +1,6 @@ using System; -namespace Volo.Abp.Http.Client.Proxying +namespace Volo.Abp.Http.Client.ClientProxying { public class ApiVersionInfo //TODO: Rename to not conflict with api versioning apis { diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index 33a1906114..703a1bd46e 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -1,9 +1,23 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Globalization; using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.Primitives; +using Volo.Abp.Content; using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.Authentication; using Volo.Abp.Http.Client.Proxying; using Volo.Abp.Http.Modeling; +using Volo.Abp.Http.ProxyScripting.Generators; +using Volo.Abp.Json; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Threading; +using Volo.Abp.Tracing; namespace Volo.Abp.Http.Client.ClientProxying { @@ -11,27 +25,37 @@ namespace Volo.Abp.Http.Client.ClientProxying { public IAbpLazyServiceProvider LazyServiceProvider { get; set; } - protected IHttpProxyExecuter HttpProxyExecuter => LazyServiceProvider.LazyGetRequiredService(); protected IClientProxyApiDescriptionFinder ClientProxyApiDescriptionFinder => LazyServiceProvider.LazyGetRequiredService(); + protected ICancellationTokenProvider CancellationTokenProvider => LazyServiceProvider.LazyGetRequiredService(); + protected ICorrelationIdProvider CorrelationIdProvider => LazyServiceProvider.LazyGetRequiredService(); + protected ICurrentTenant CurrentTenant => LazyServiceProvider.LazyGetRequiredService(); + protected IOptions AbpCorrelationIdOptions => LazyServiceProvider.LazyGetRequiredService>(); + protected IProxyHttpClientFactory HttpClientFactory => LazyServiceProvider.LazyGetRequiredService(); + protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider => LazyServiceProvider.LazyGetRequiredService(); + protected IOptions ClientOptions => LazyServiceProvider.LazyGetRequiredService>(); + protected IJsonSerializer JsonSerializer => LazyServiceProvider.LazyGetRequiredService(); + protected IRemoteServiceHttpClientAuthenticator ClientAuthenticator => LazyServiceProvider.LazyGetRequiredService(); + protected ClientProxyRequestPayloadBuilder ClientProxyRequestPayloadBuilder => LazyServiceProvider.LazyGetRequiredService(); + protected ClientProxyUrlBuilder ClientProxyUrlBuilder => LazyServiceProvider.LazyGetRequiredService(); protected virtual async Task RequestAsync(string methodName, params object[] arguments) { - await HttpProxyExecuter.MakeRequestAsync(BuildHttpProxyExecuterContext(methodName, arguments)); + await RequestAsync(BuildHttpProxyClientProxyContext(methodName, arguments)); } protected virtual async Task RequestAsync(string methodName, params object[] arguments) { - return await HttpProxyExecuter.MakeRequestAndGetResultAsync(BuildHttpProxyExecuterContext(methodName, arguments)); + return await RequestAsync(BuildHttpProxyClientProxyContext(methodName, arguments)); } - protected virtual HttpProxyExecuterContext BuildHttpProxyExecuterContext(string methodName, params object[] arguments) + protected virtual ClientProxyRequestContext BuildHttpProxyClientProxyContext(string methodName, params object[] arguments) { - var actionKey = GetActionKey(methodName, arguments); - var action = ClientProxyApiDescriptionFinder.FindAction(actionKey); - return new HttpProxyExecuterContext(action, BuildArguments(action, arguments), typeof(TService)); + var methodUniqueName = $"{typeof(TService).FullName}.{methodName}.{string.Join("-", arguments.Select(x => x.GetType().FullName))}"; + var action = ClientProxyApiDescriptionFinder.FindAction(methodUniqueName); + return new ClientProxyRequestContext(action, BuildActionArguments(action, arguments), typeof(TService)); } - protected virtual Dictionary BuildArguments(ActionApiDescriptionModel action, object[] arguments) + protected virtual Dictionary BuildActionArguments(ActionApiDescriptionModel action, object[] arguments) { var parameters = action.Parameters.GroupBy(x => x.NameOnMethod).Select(x => x.Key).ToList(); var dict = new Dictionary(); @@ -44,9 +68,225 @@ namespace Volo.Abp.Http.Client.ClientProxying return dict; } - private static string GetActionKey(string methodName, params object[] arguments) + public virtual async Task RequestAsync(ClientProxyRequestContext requestContext) { - return $"{typeof(TService).FullName}.{methodName}.{string.Join("-", arguments.Select(x => x.GetType().FullName))}"; + var responseContent = await RequestAsync(requestContext); + + if (typeof(T) == typeof(IRemoteStreamContent) || + typeof(T) == typeof(RemoteStreamContent)) + { + /* returning a class that holds a reference to response + * content just to be sure that GC does not dispose of + * it before we finish doing our work with the stream */ + return (T)(object)new RemoteStreamContent( + await responseContent.ReadAsStreamAsync(), + responseContent.Headers?.ContentDisposition?.FileNameStar ?? + RemoveQuotes(responseContent.Headers?.ContentDisposition?.FileName).ToString(), + responseContent.Headers?.ContentType?.ToString(), + responseContent.Headers?.ContentLength); + } + + var stringContent = await responseContent.ReadAsStringAsync(); + if (typeof(T) == typeof(string)) + { + return (T)(object)stringContent; + } + + if (stringContent.IsNullOrWhiteSpace()) + { + return default; + } + + return JsonSerializer.Deserialize(stringContent); + } + + public virtual async Task RequestAsync(ClientProxyRequestContext requestContext) + { + var clientConfig = ClientOptions.Value.HttpClientProxies.GetOrDefault(requestContext.ServiceType) ?? throw new AbpException($"Could not get HttpClientProxyConfig for {requestContext.ServiceType.FullName}."); + var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync(clientConfig.RemoteServiceName); + + var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); + + var apiVersion = await GetApiVersionInfoAsync(requestContext); + var url = remoteServiceConfig.BaseUrl.EnsureEndsWith('/') + await GetUrlWithParametersAsync(requestContext, apiVersion); + + var requestMessage = new HttpRequestMessage(requestContext.Action.GetHttpMethod(), url) + { + Content = ClientProxyRequestPayloadBuilder.BuildContent(requestContext.Action, requestContext.Arguments, JsonSerializer, apiVersion) + }; + + AddHeaders(requestContext.Arguments, requestContext.Action, requestMessage, apiVersion); + + if (requestContext.Action.AllowAnonymous != true) + { + await ClientAuthenticator.Authenticate( + new RemoteServiceHttpClientAuthenticateContext( + client, + requestMessage, + remoteServiceConfig, + clientConfig.RemoteServiceName + ) + ); + } + + var response = await client.SendAsync( + requestMessage, + HttpCompletionOption.ResponseHeadersRead /*this will buffer only the headers, the content will be used as a stream*/, + GetCancellationToken(requestContext.Arguments) + ); + + if (!response.IsSuccessStatusCode) + { + await ThrowExceptionForResponseAsync(response); + } + + return response.Content; + } + + protected virtual async Task GetApiVersionInfoAsync(ClientProxyRequestContext requestContext) + { + var apiVersion = await FindBestApiVersionAsync(requestContext); + + //TODO: Make names configurable? + var versionParam = requestContext.Action.Parameters.FirstOrDefault(p => p.Name == "apiVersion" && p.BindingSourceId == ParameterBindingSources.Path) ?? + requestContext.Action.Parameters.FirstOrDefault(p => p.Name == "api-version" && p.BindingSourceId == ParameterBindingSources.Query); + + return new ApiVersionInfo(versionParam?.BindingSourceId, apiVersion); + } + + protected virtual Task GetUrlWithParametersAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) + { + return Task.FromResult(ClientProxyUrlBuilder.GenerateUrlWithParameters(requestContext.Action, requestContext.Arguments, apiVersion)); + } + + protected virtual Task GetHttpContentAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) + { + return Task.FromResult(ClientProxyRequestPayloadBuilder.BuildContent(requestContext.Action, requestContext.Arguments, JsonSerializer, apiVersion)); + } + + protected virtual async Task FindBestApiVersionAsync(ClientProxyRequestContext requestContext) + { + var configuredVersion = await GetConfiguredApiVersionAsync(requestContext); + + if (requestContext.Action.SupportedVersions.IsNullOrEmpty()) + { + return configuredVersion ?? "1.0"; + } + + if (requestContext.Action.SupportedVersions.Contains(configuredVersion)) + { + return configuredVersion; + } + + return requestContext.Action.SupportedVersions.Last(); //TODO: Ensure to get the latest version! + } + + protected virtual async Task GetConfiguredApiVersionAsync(ClientProxyRequestContext requestContext) + { + var clientConfig = ClientOptions.Value.HttpClientProxies.GetOrDefault(requestContext.ServiceType) + ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {requestContext.ServiceType.FullName}."); + + return (await RemoteServiceConfigurationProvider + .GetConfigurationOrDefaultOrNullAsync(clientConfig.RemoteServiceName))?.Version; + } + + protected virtual async Task ThrowExceptionForResponseAsync(HttpResponseMessage response) + { + if (response.Headers.Contains(AbpHttpConsts.AbpErrorFormat)) + { + var errorResponse = JsonSerializer.Deserialize( + await response.Content.ReadAsStringAsync() + ); + + throw new AbpRemoteCallException(errorResponse.Error) + { + HttpStatusCode = (int) response.StatusCode + }; + } + + throw new AbpRemoteCallException( + new RemoteServiceErrorInfo + { + Message = response.ReasonPhrase, + Code = response.StatusCode.ToString() + } + ) + { + HttpStatusCode = (int) response.StatusCode + }; + } + + protected virtual void AddHeaders( + IReadOnlyDictionary argumentsDictionary, + ActionApiDescriptionModel action, + HttpRequestMessage requestMessage, + ApiVersionInfo apiVersion) + { + //API Version + if (!apiVersion.Version.IsNullOrEmpty()) + { + //TODO: What about other media types? + requestMessage.Headers.Add("accept", $"{MimeTypes.Text.Plain}; v={apiVersion.Version}"); + requestMessage.Headers.Add("accept", $"{MimeTypes.Application.Json}; v={apiVersion.Version}"); + requestMessage.Headers.Add("api-version", apiVersion.Version); + } + + //Header parameters + var headers = action.Parameters.Where(p => p.BindingSourceId == ParameterBindingSources.Header).ToArray(); + foreach (var headerParameter in headers) + { + var value = HttpActionParameterHelper.FindParameterValue(argumentsDictionary, headerParameter); + if (value != null) + { + requestMessage.Headers.Add(headerParameter.Name, value.ToString()); + } + } + + //CorrelationId + requestMessage.Headers.Add(AbpCorrelationIdOptions.Value.HttpHeaderName, CorrelationIdProvider.Get()); + + //TenantId + if (CurrentTenant.Id.HasValue) + { + //TODO: Use AbpAspNetCoreMultiTenancyOptions to get the key + requestMessage.Headers.Add(TenantResolverConsts.DefaultTenantKey, CurrentTenant.Id.Value.ToString()); + } + + //Culture + //TODO: Is that the way we want? Couldn't send the culture (not ui culture) + var currentCulture = CultureInfo.CurrentUICulture.Name ?? CultureInfo.CurrentCulture.Name; + if (!currentCulture.IsNullOrEmpty()) + { + requestMessage.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(currentCulture)); + } + + //X-Requested-With + requestMessage.Headers.Add("X-Requested-With", "XMLHttpRequest"); + } + + protected virtual StringSegment RemoveQuotes(StringSegment input) + { + if (!StringSegment.IsNullOrEmpty(input) && input.Length >= 2 && input[0] == '"' && input[input.Length - 1] == '"') + { + input = input.Subsegment(1, input.Length - 2); + } + + return input; + } + + protected virtual CancellationToken GetCancellationToken(IReadOnlyDictionary arguments) + { + var cancellationTokenArg = arguments.LastOrDefault(); + + if (cancellationTokenArg.Value is CancellationToken cancellationToken) + { + if (cancellationToken != default) + { + return cancellationToken; + } + } + + return CancellationTokenProvider.Token; } } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpProxyExecuterContext.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestContext.cs similarity index 85% rename from framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpProxyExecuterContext.cs rename to framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestContext.cs index e61b2af93a..089a61c0d8 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpProxyExecuterContext.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestContext.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; using JetBrains.Annotations; using Volo.Abp.Http.Modeling; -namespace Volo.Abp.Http.Client.Proxying +namespace Volo.Abp.Http.Client.ClientProxying { - public class HttpProxyExecuterContext + public class ClientProxyRequestContext { [NotNull] public ActionApiDescriptionModel Action { get; } @@ -16,7 +16,7 @@ namespace Volo.Abp.Http.Client.Proxying [NotNull] public Type ServiceType { get; } - public HttpProxyExecuterContext( + public ClientProxyRequestContext( [NotNull] ActionApiDescriptionModel action, [NotNull] IReadOnlyDictionary arguments, [NotNull] Type serviceType) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/RequestPayloadBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs similarity index 88% rename from framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/RequestPayloadBuilder.cs rename to framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs index 583798f43f..3ba7026c8e 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/RequestPayloadBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs @@ -6,17 +6,18 @@ using System.Net.Http.Headers; using System.Text; using JetBrains.Annotations; using Volo.Abp.Content; -using Volo.Abp.Http.Client.DynamicProxying; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.Proxying; using Volo.Abp.Http.Modeling; using Volo.Abp.Http.ProxyScripting.Generators; using Volo.Abp.Json; -namespace Volo.Abp.Http.Client.Proxying +namespace Volo.Abp.Http.Client.ClientProxying { - public static class RequestPayloadBuilder + public class ClientProxyRequestPayloadBuilder : ITransientDependency { [CanBeNull] - public static HttpContent BuildContent(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) + public virtual HttpContent BuildContent(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) { var body = GenerateBody(action, methodArguments, jsonSerializer); if (body != null) @@ -29,7 +30,7 @@ namespace Volo.Abp.Http.Client.Proxying return body; } - private static HttpContent GenerateBody(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) + protected virtual HttpContent GenerateBody(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) { var parameters = action .Parameters @@ -57,7 +58,7 @@ namespace Volo.Abp.Http.Client.Proxying return new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json); } - private static HttpContent GenerateFormPostData(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) + protected virtual HttpContent GenerateFormPostData(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) { var parameters = action .Parameters diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/UrlBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs similarity index 80% rename from framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/UrlBuilder.cs rename to framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs index 5f916fdd88..464ca3f26d 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/UrlBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs @@ -5,16 +5,25 @@ using System.Globalization; using System.Linq; using System.Text; using JetBrains.Annotations; -using Volo.Abp.Http.Client.DynamicProxying; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.Proxying; using Volo.Abp.Http.Modeling; using Volo.Abp.Http.ProxyScripting.Generators; using Volo.Abp.Localization; -namespace Volo.Abp.Http.Client.Proxying +namespace Volo.Abp.Http.Client.ClientProxying { - internal static class UrlBuilder + public class ClientProxyUrlBuilder : ITransientDependency { - public static string GenerateUrlWithParameters(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) + protected IServiceScopeFactory ServiceProviderFactory { get; } + + public ClientProxyUrlBuilder(IServiceScopeFactory serviceProviderFactory) + { + ServiceProviderFactory = serviceProviderFactory; + } + + public string GenerateUrlWithParameters(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) { // The ASP.NET Core route value provider and query string value provider: // Treat values as invariant culture. @@ -30,7 +39,7 @@ namespace Volo.Abp.Http.Client.Proxying } } - private static void ReplacePathVariables(StringBuilder urlBuilder, IList actionParameters, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) + protected virtual void ReplacePathVariables(StringBuilder urlBuilder, IList actionParameters, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) { var pathParameters = actionParameters .Where(p => p.BindingSourceId == ParameterBindingSources.Path) @@ -72,7 +81,7 @@ namespace Volo.Abp.Http.Client.Proxying } } - private static void AddQueryStringParameters(StringBuilder urlBuilder, IList actionParameters, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) + protected virtual void AddQueryStringParameters(StringBuilder urlBuilder, IList actionParameters, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) { var queryStringParameters = actionParameters .Where(p => p.BindingSourceId.IsIn(ParameterBindingSources.ModelBinding, ParameterBindingSources.Query)) @@ -100,7 +109,7 @@ namespace Volo.Abp.Http.Client.Proxying } } - private static bool AddQueryStringParameter( + protected virtual bool AddQueryStringParameter( StringBuilder urlBuilder, bool isFirstParam, string name, @@ -133,7 +142,7 @@ namespace Volo.Abp.Http.Client.Proxying return true; } - private static string ConvertValueToString([CanBeNull] object value) + protected virtual string ConvertValueToString([CanBeNull] object value) { if (value is DateTime dateTimeValue) { diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 68eb146201..73354773da 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.DynamicProxy; +using Volo.Abp.Http.Client.ClientProxying; using Volo.Abp.Http.Client.Proxying; using Volo.Abp.Http.Modeling; @@ -15,32 +16,21 @@ namespace Volo.Abp.Http.Client.DynamicProxying { public class DynamicHttpProxyInterceptor : AbpInterceptor, ITransientDependency { - // ReSharper disable once StaticMemberInGenericType - protected static MethodInfo MakeRequestAndGetResultAsyncMethod { get; } - + public ILogger> Logger { get; set; } + protected DynamicHttpProxyInterceptorClientProxy InterceptorClientProxy { get; } protected AbpHttpClientOptions ClientOptions { get; } - protected IHttpProxyExecuter HttpProxyExecuter { get; } protected IProxyHttpClientFactory HttpClientFactory { get; } protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } protected IApiDescriptionFinder ApiDescriptionFinder { get; } - public ILogger> Logger { get; set; } - - static DynamicHttpProxyInterceptor() - { - MakeRequestAndGetResultAsyncMethod = typeof(HttpProxyExecuter) - .GetMethods(BindingFlags.Public | BindingFlags.Instance) - .First(m => m.Name == nameof(IHttpProxyExecuter.MakeRequestAndGetResultAsync) && m.IsGenericMethodDefinition); - } - public DynamicHttpProxyInterceptor( - IHttpProxyExecuter httpProxyExecuter, + DynamicHttpProxyInterceptorClientProxy interceptorClientProxy, IOptions clientOptions, IProxyHttpClientFactory httpClientFactory, IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider, IApiDescriptionFinder apiDescriptionFinder) { - HttpProxyExecuter = httpProxyExecuter; + InterceptorClientProxy = interceptorClientProxy; HttpClientFactory = httpClientFactory; RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; ApiDescriptionFinder = apiDescriptionFinder; @@ -49,23 +39,27 @@ namespace Volo.Abp.Http.Client.DynamicProxying Logger = NullLogger>.Instance; } - public override async Task InterceptAsync(IAbpMethodInvocation invocation) { - var context = new HttpProxyExecuterContext( + var context = new ClientProxyRequestContext( await GetActionApiDescriptionModel(invocation), invocation.ArgumentsDictionary, typeof(TService)); if (invocation.Method.ReturnType.GenericTypeArguments.IsNullOrEmpty()) { - await HttpProxyExecuter.MakeRequestAsync(context); + await InterceptorClientProxy.RequestAsync(context); } else { - var result = (Task)MakeRequestAndGetResultAsyncMethod + var result = (Task)InterceptorClientProxy + .GetType() + .GetMethods() + .Single(m => m.Name == nameof(InterceptorClientProxy.RequestAsync) && + m.IsGenericMethod && + m.GetParameters().Any(x => x.ParameterType == typeof(ClientProxyRequestContext))) .MakeGenericMethod(invocation.Method.ReturnType.GenericTypeArguments[0]) - .Invoke(HttpProxyExecuter, new object[] { context }); + .Invoke(InterceptorClientProxy, new object[] { context }); invocation.ReturnValue = await GetResultAsync( result, @@ -74,7 +68,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying } } - private async Task GetActionApiDescriptionModel(IAbpMethodInvocation invocation) + protected virtual async Task GetActionApiDescriptionModel(IAbpMethodInvocation invocation) { var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync(clientConfig.RemoteServiceName); @@ -88,13 +82,14 @@ namespace Volo.Abp.Http.Client.DynamicProxying ); } - private async Task GetResultAsync(Task task, Type resultType) + protected virtual async Task GetResultAsync(Task task, Type resultType) { await task; - return typeof(Task<>) + var resultProperty = typeof(Task<>) .MakeGenericType(resultType) - .GetProperty(nameof(Task.Result), BindingFlags.Instance | BindingFlags.Public) - .GetValue(task); + .GetProperty(nameof(Task.Result), BindingFlags.Instance | BindingFlags.Public); + Check.NotNull(resultProperty, nameof(resultProperty)); + return resultProperty.GetValue(task); } } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs new file mode 100644 index 0000000000..d2a9bb971e --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Http.Client.ClientProxying; + +namespace Volo.Abp.Http.Client.DynamicProxying +{ + public class DynamicHttpProxyInterceptorClientProxy : ClientProxyBase + { + + } +} diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpProxyExecuter.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpProxyExecuter.cs deleted file mode 100644 index 6fe5376f2d..0000000000 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpProxyExecuter.cs +++ /dev/null @@ -1,267 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Options; -using Microsoft.Extensions.Primitives; -using Volo.Abp.Content; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client.Authentication; -using Volo.Abp.Http.Modeling; -using Volo.Abp.Http.ProxyScripting.Generators; -using Volo.Abp.Json; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Threading; -using Volo.Abp.Tracing; - -namespace Volo.Abp.Http.Client.Proxying -{ - public class HttpProxyExecuter : IHttpProxyExecuter, ITransientDependency - { - protected ICancellationTokenProvider CancellationTokenProvider { get; } - protected ICorrelationIdProvider CorrelationIdProvider { get; } - protected ICurrentTenant CurrentTenant { get; } - protected AbpCorrelationIdOptions AbpCorrelationIdOptions { get; } - protected IProxyHttpClientFactory HttpClientFactory { get; } - protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } - protected AbpHttpClientOptions ClientOptions { get; } - protected IJsonSerializer JsonSerializer { get; } - protected IRemoteServiceHttpClientAuthenticator ClientAuthenticator { get; } - - public HttpProxyExecuter( - ICancellationTokenProvider cancellationTokenProvider, - ICorrelationIdProvider correlationIdProvider, - ICurrentTenant currentTenant, - IOptions abpCorrelationIdOptions, - IProxyHttpClientFactory httpClientFactory, - IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider, - IOptions clientOptions, - IRemoteServiceHttpClientAuthenticator clientAuthenticator, - IJsonSerializer jsonSerializer) - { - CancellationTokenProvider = cancellationTokenProvider; - CorrelationIdProvider = correlationIdProvider; - CurrentTenant = currentTenant; - AbpCorrelationIdOptions = abpCorrelationIdOptions.Value; - HttpClientFactory = httpClientFactory; - RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; - ClientOptions = clientOptions.Value; - ClientAuthenticator = clientAuthenticator; - JsonSerializer = jsonSerializer; - } - - public virtual async Task MakeRequestAndGetResultAsync(HttpProxyExecuterContext context) - { - var responseContent = await MakeRequestAsync(context); - - if (typeof(T) == typeof(IRemoteStreamContent) || - typeof(T) == typeof(RemoteStreamContent)) - { - /* returning a class that holds a reference to response - * content just to be sure that GC does not dispose of - * it before we finish doing our work with the stream */ - return (T) (object) new RemoteStreamContent( - await responseContent.ReadAsStreamAsync(), - responseContent.Headers?.ContentDisposition?.FileNameStar ?? RemoveQuotes(responseContent.Headers?.ContentDisposition?.FileName).ToString(), - responseContent.Headers?.ContentType?.ToString(), - responseContent.Headers?.ContentLength); - } - - var stringContent = await responseContent.ReadAsStringAsync(); - if (typeof(T) == typeof(string)) - { - return (T)(object)stringContent; - } - - if (stringContent.IsNullOrWhiteSpace()) - { - return default; - } - - return JsonSerializer.Deserialize(stringContent); - } - - public virtual async Task MakeRequestAsync(HttpProxyExecuterContext context) - { - var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(context.ServiceType) ?? throw new AbpException($"Could not get HttpClientProxyConfig for {context.ServiceType.FullName}."); - var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync(clientConfig.RemoteServiceName); - - var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); - - var apiVersion = await GetApiVersionInfoAsync(context); - var url = remoteServiceConfig.BaseUrl.EnsureEndsWith('/') + UrlBuilder.GenerateUrlWithParameters(context.Action, context.Arguments, apiVersion); - - var requestMessage = new HttpRequestMessage(context.Action.GetHttpMethod(), url) - { - Content = RequestPayloadBuilder.BuildContent(context.Action, context.Arguments, JsonSerializer, apiVersion) - }; - - AddHeaders(context.Arguments, context.Action, requestMessage, apiVersion); - - if (context.Action.AllowAnonymous != true) - { - await ClientAuthenticator.Authenticate( - new RemoteServiceHttpClientAuthenticateContext( - client, - requestMessage, - remoteServiceConfig, - clientConfig.RemoteServiceName - ) - ); - } - - var response = await client.SendAsync( - requestMessage, - HttpCompletionOption.ResponseHeadersRead /*this will buffer only the headers, the content will be used as a stream*/, - GetCancellationToken(context.Arguments) - ); - - if (!response.IsSuccessStatusCode) - { - await ThrowExceptionForResponseAsync(response); - } - - return response.Content; - } - - private async Task GetApiVersionInfoAsync(HttpProxyExecuterContext context) - { - var apiVersion = await FindBestApiVersionAsync(context); - - //TODO: Make names configurable? - var versionParam = context.Action.Parameters.FirstOrDefault(p => p.Name == "apiVersion" && p.BindingSourceId == ParameterBindingSources.Path) ?? - context.Action.Parameters.FirstOrDefault(p => p.Name == "api-version" && p.BindingSourceId == ParameterBindingSources.Query); - - return new ApiVersionInfo(versionParam?.BindingSourceId, apiVersion); - } - - private async Task FindBestApiVersionAsync(HttpProxyExecuterContext context) - { - var configuredVersion = await GetConfiguredApiVersionAsync(context); - - if (context.Action.SupportedVersions.IsNullOrEmpty()) - { - return configuredVersion ?? "1.0"; - } - - if (context.Action.SupportedVersions.Contains(configuredVersion)) - { - return configuredVersion; - } - - return context.Action.SupportedVersions.Last(); //TODO: Ensure to get the latest version! - } - - private async Task GetConfiguredApiVersionAsync(HttpProxyExecuterContext context) - { - var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(context.ServiceType) - ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {context.ServiceType.FullName}."); - - return (await RemoteServiceConfigurationProvider - .GetConfigurationOrDefaultOrNullAsync(clientConfig.RemoteServiceName))?.Version; - } - - private async Task ThrowExceptionForResponseAsync(HttpResponseMessage response) - { - if (response.Headers.Contains(AbpHttpConsts.AbpErrorFormat)) - { - var errorResponse = JsonSerializer.Deserialize( - await response.Content.ReadAsStringAsync() - ); - - throw new AbpRemoteCallException(errorResponse.Error) - { - HttpStatusCode = (int) response.StatusCode - }; - } - - throw new AbpRemoteCallException( - new RemoteServiceErrorInfo - { - Message = response.ReasonPhrase, - Code = response.StatusCode.ToString() - } - ) - { - HttpStatusCode = (int) response.StatusCode - }; - } - - protected virtual void AddHeaders( - IReadOnlyDictionary argumentsDictionary, - ActionApiDescriptionModel action, - HttpRequestMessage requestMessage, - ApiVersionInfo apiVersion) - { - //API Version - if (!apiVersion.Version.IsNullOrEmpty()) - { - //TODO: What about other media types? - requestMessage.Headers.Add("accept", $"{MimeTypes.Text.Plain}; v={apiVersion.Version}"); - requestMessage.Headers.Add("accept", $"{MimeTypes.Application.Json}; v={apiVersion.Version}"); - requestMessage.Headers.Add("api-version", apiVersion.Version); - } - - //Header parameters - var headers = action.Parameters.Where(p => p.BindingSourceId == ParameterBindingSources.Header).ToArray(); - foreach (var headerParameter in headers) - { - var value = HttpActionParameterHelper.FindParameterValue(argumentsDictionary, headerParameter); - if (value != null) - { - requestMessage.Headers.Add(headerParameter.Name, value.ToString()); - } - } - - //CorrelationId - requestMessage.Headers.Add(AbpCorrelationIdOptions.HttpHeaderName, CorrelationIdProvider.Get()); - - //TenantId - if (CurrentTenant.Id.HasValue) - { - //TODO: Use AbpAspNetCoreMultiTenancyOptions to get the key - requestMessage.Headers.Add(TenantResolverConsts.DefaultTenantKey, CurrentTenant.Id.Value.ToString()); - } - - //Culture - //TODO: Is that the way we want? Couldn't send the culture (not ui culture) - var currentCulture = CultureInfo.CurrentUICulture.Name ?? CultureInfo.CurrentCulture.Name; - if (!currentCulture.IsNullOrEmpty()) - { - requestMessage.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(currentCulture)); - } - - //X-Requested-With - requestMessage.Headers.Add("X-Requested-With", "XMLHttpRequest"); - } - - protected virtual StringSegment RemoveQuotes(StringSegment input) - { - if (!StringSegment.IsNullOrEmpty(input) && input.Length >= 2 && input[0] == '"' && input[input.Length - 1] == '"') - { - input = input.Subsegment(1, input.Length - 2); - } - - return input; - } - - protected virtual CancellationToken GetCancellationToken(IReadOnlyDictionary arguments) - { - var cancellationTokenArg = arguments.LastOrDefault(); - - if (cancellationTokenArg.Value is CancellationToken cancellationToken) - { - if (cancellationToken != default) - { - return cancellationToken; - } - } - - return CancellationTokenProvider.Token; - } - } -} diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/IHttpProxyExecuter.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/IHttpProxyExecuter.cs deleted file mode 100644 index a7f48f14fe..0000000000 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/IHttpProxyExecuter.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; - -namespace Volo.Abp.Http.Client.Proxying -{ - public interface IHttpProxyExecuter - { - Task MakeRequestAsync(HttpProxyExecuterContext context); - - Task MakeRequestAndGetResultAsync(HttpProxyExecuterContext context); - } -} From f48cafb4ccdccd0b8630a4cb749a3d056b7312e5 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 16 Sep 2021 14:52:20 +0800 Subject: [PATCH 02/42] Change public to protected in ClientProxyBase. --- .../Http/Client/ClientProxying/ClientProxyBase.cs | 4 ++-- .../DynamicProxying/DynamicHttpProxyInterceptor.cs | 4 ++-- .../DynamicHttpProxyInterceptorClientProxy.cs | 12 +++++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index 703a1bd46e..b39fc35ee8 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -68,7 +68,7 @@ namespace Volo.Abp.Http.Client.ClientProxying return dict; } - public virtual async Task RequestAsync(ClientProxyRequestContext requestContext) + protected virtual async Task RequestAsync(ClientProxyRequestContext requestContext) { var responseContent = await RequestAsync(requestContext); @@ -100,7 +100,7 @@ namespace Volo.Abp.Http.Client.ClientProxying return JsonSerializer.Deserialize(stringContent); } - public virtual async Task RequestAsync(ClientProxyRequestContext requestContext) + protected virtual async Task RequestAsync(ClientProxyRequestContext requestContext) { var clientConfig = ClientOptions.Value.HttpClientProxies.GetOrDefault(requestContext.ServiceType) ?? throw new AbpException($"Could not get HttpClientProxyConfig for {requestContext.ServiceType.FullName}."); var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync(clientConfig.RemoteServiceName); diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 73354773da..2a385b241e 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -48,14 +48,14 @@ namespace Volo.Abp.Http.Client.DynamicProxying if (invocation.Method.ReturnType.GenericTypeArguments.IsNullOrEmpty()) { - await InterceptorClientProxy.RequestAsync(context); + await InterceptorClientProxy.CallRequestAsync(context); } else { var result = (Task)InterceptorClientProxy .GetType() .GetMethods() - .Single(m => m.Name == nameof(InterceptorClientProxy.RequestAsync) && + .Single(m => m.Name == nameof(InterceptorClientProxy.CallRequestAsync) && m.IsGenericMethod && m.GetParameters().Any(x => x.ParameterType == typeof(ClientProxyRequestContext))) .MakeGenericMethod(invocation.Method.ReturnType.GenericTypeArguments[0]) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs index d2a9bb971e..0d8cd3f9df 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptorClientProxy.cs @@ -1,9 +1,19 @@ -using Volo.Abp.Http.Client.ClientProxying; +using System.Net.Http; +using System.Threading.Tasks; +using Volo.Abp.Http.Client.ClientProxying; namespace Volo.Abp.Http.Client.DynamicProxying { public class DynamicHttpProxyInterceptorClientProxy : ClientProxyBase { + public virtual async Task CallRequestAsync(ClientProxyRequestContext requestContext) + { + return await base.RequestAsync(requestContext); + } + public virtual async Task CallRequestAsync(ClientProxyRequestContext requestContext) + { + return await base.RequestAsync(requestContext); + } } } From 96aae3a1ae57b3bb33a18289f967777fcb4acec0 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 16 Sep 2021 15:27:42 +0800 Subject: [PATCH 03/42] Refactor BuildActionArguments method. --- .../Http/Client/ClientProxying/ClientProxyBase.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index b39fc35ee8..82d31c2067 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -57,15 +57,10 @@ namespace Volo.Abp.Http.Client.ClientProxying protected virtual Dictionary BuildActionArguments(ActionApiDescriptionModel action, object[] arguments) { - var parameters = action.Parameters.GroupBy(x => x.NameOnMethod).Select(x => x.Key).ToList(); - var dict = new Dictionary(); - - for (var i = 0; i < parameters.Count; i++) - { - dict[parameters[i]] = arguments[i]; - } - - return dict; + return action.Parameters + .GroupBy(x => x.NameOnMethod) + .Select((x, i) => new KeyValuePair(x.Key, arguments[i])) + .ToDictionary(x => x.Key, x => x.Value); } protected virtual async Task RequestAsync(ClientProxyRequestContext requestContext) From e5c4254df51b187d53f6a84146526331bcb6fadf Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 16 Sep 2021 15:37:50 +0800 Subject: [PATCH 04/42] Remove BuildActionArguments. --- .../Client/ClientProxying/ClientProxyBase.cs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index 82d31c2067..b547ca256c 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -52,15 +52,13 @@ namespace Volo.Abp.Http.Client.ClientProxying { var methodUniqueName = $"{typeof(TService).FullName}.{methodName}.{string.Join("-", arguments.Select(x => x.GetType().FullName))}"; var action = ClientProxyApiDescriptionFinder.FindAction(methodUniqueName); - return new ClientProxyRequestContext(action, BuildActionArguments(action, arguments), typeof(TService)); - } - - protected virtual Dictionary BuildActionArguments(ActionApiDescriptionModel action, object[] arguments) - { - return action.Parameters - .GroupBy(x => x.NameOnMethod) - .Select((x, i) => new KeyValuePair(x.Key, arguments[i])) - .ToDictionary(x => x.Key, x => x.Value); + return new ClientProxyRequestContext( + action, + action.Parameters + .GroupBy(x => x.NameOnMethod) + .Select((x, i) => new KeyValuePair(x.Key, arguments[i])) + .ToDictionary(x => x.Key, x => x.Value), + typeof(TService)); } protected virtual async Task RequestAsync(ClientProxyRequestContext requestContext) From b65a8d7dc571e3a0eb5bc59d8cbd88f62df6a44a Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 16 Sep 2021 16:59:31 +0800 Subject: [PATCH 05/42] Cache CallRequestAsyncMethod. --- .../DynamicHttpProxyInterceptor.cs | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 2a385b241e..c35995447a 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -16,6 +16,17 @@ namespace Volo.Abp.Http.Client.DynamicProxying { public class DynamicHttpProxyInterceptor : AbpInterceptor, ITransientDependency { + + // ReSharper disable once StaticMemberInGenericType + protected static MethodInfo CallRequestAsyncMethod { get; } + + static DynamicHttpProxyInterceptor() + { + CallRequestAsyncMethod = typeof(DynamicHttpProxyInterceptor) + .GetMethods(BindingFlags.NonPublic | BindingFlags.Instance) + .First(m => m.Name == nameof(CallRequestAsync) && m.IsGenericMethodDefinition); + } + public ILogger> Logger { get; set; } protected DynamicHttpProxyInterceptorClientProxy InterceptorClientProxy { get; } protected AbpHttpClientOptions ClientOptions { get; } @@ -52,25 +63,19 @@ namespace Volo.Abp.Http.Client.DynamicProxying } else { - var result = (Task)InterceptorClientProxy - .GetType() - .GetMethods() - .Single(m => m.Name == nameof(InterceptorClientProxy.CallRequestAsync) && - m.IsGenericMethod && - m.GetParameters().Any(x => x.ParameterType == typeof(ClientProxyRequestContext))) - .MakeGenericMethod(invocation.Method.ReturnType.GenericTypeArguments[0]) - .Invoke(InterceptorClientProxy, new object[] { context }); + var returnType = invocation.Method.ReturnType.GenericTypeArguments[0]; + var result = (Task)CallRequestAsyncMethod + .MakeGenericMethod(returnType) + .Invoke(this, new object[] { context }); - invocation.ReturnValue = await GetResultAsync( - result, - invocation.Method.ReturnType.GetGenericArguments()[0] - ); + invocation.ReturnValue = await GetResultAsync(result, returnType); } } protected virtual async Task GetActionApiDescriptionModel(IAbpMethodInvocation invocation) { - var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); + var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? + throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync(clientConfig.RemoteServiceName); var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); @@ -82,6 +87,11 @@ namespace Volo.Abp.Http.Client.DynamicProxying ); } + protected virtual async Task CallRequestAsync(ClientProxyRequestContext context) + { + return await InterceptorClientProxy.CallRequestAsync(context); + } + protected virtual async Task GetResultAsync(Task task, Type resultType) { await task; From 86d05288d84a25818a5a74f02d77b0997cc7beb3 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 21 Sep 2021 17:06:30 +0800 Subject: [PATCH 06/42] Make app of modules work --- .../BloggingTestAppModule.cs | 5 +- .../Volo.BloggingTestApp.csproj | 12 +- .../CmsKitIdentityServerModule.cs | 1 + .../Volo.CmsKit.IdentityServer.csproj | 1 + .../libs/sweetalert2/sweetalert2.all.js | 3123 +++++++++++++++++ .../libs/sweetalert2/sweetalert2.all.min.js | 2 + .../wwwroot/libs/sweetalert2/sweetalert2.css | 1319 +++++++ .../wwwroot/libs/sweetalert2/sweetalert2.js | 3121 ++++++++++++++++ .../libs/sweetalert2/sweetalert2.min.css | 1 + .../libs/sweetalert2/sweetalert2.min.js | 1 + .../libs/sweetalert2/sweetalert2.all.js | 3123 +++++++++++++++++ .../libs/sweetalert2/sweetalert2.all.min.js | 2 + .../wwwroot/libs/sweetalert2/sweetalert2.css | 1319 +++++++ .../wwwroot/libs/sweetalert2/sweetalert2.js | 3121 ++++++++++++++++ .../libs/sweetalert2/sweetalert2.min.css | 1 + .../libs/sweetalert2/sweetalert2.min.js | 1 + .../CmsKitWebUnifiedModule.cs | 11 +- .../Volo.CmsKit.Web.Unified.csproj | 6 + .../libs/sweetalert2/sweetalert2.all.js | 3123 +++++++++++++++++ .../libs/sweetalert2/sweetalert2.all.min.js | 2 + .../wwwroot/libs/sweetalert2/sweetalert2.css | 1319 +++++++ .../wwwroot/libs/sweetalert2/sweetalert2.js | 3121 ++++++++++++++++ .../libs/sweetalert2/sweetalert2.min.css | 1 + .../libs/sweetalert2/sweetalert2.min.js | 1 + .../docs/app/VoloDocs.Web/VoloDocs.Web.csproj | 5 + .../app/VoloDocs.Web/VoloDocsWebModule.cs | 10 +- .../libs/sweetalert2/sweetalert2.all.js | 3123 +++++++++++++++++ .../libs/sweetalert2/sweetalert2.all.min.js | 2 + .../wwwroot/libs/sweetalert2/sweetalert2.css | 1319 +++++++ .../wwwroot/libs/sweetalert2/sweetalert2.js | 3121 ++++++++++++++++ .../libs/sweetalert2/sweetalert2.min.css | 1 + .../libs/sweetalert2/sweetalert2.min.js | 1 + .../DemoAppModule.cs | 5 + .../Volo.Abp.SettingManagement.DemoApp.csproj | 4 + .../libs/sweetalert2/sweetalert2.all.js | 3123 +++++++++++++++++ .../libs/sweetalert2/sweetalert2.all.min.js | 2 + .../wwwroot/libs/sweetalert2/sweetalert2.css | 1319 +++++++ .../wwwroot/libs/sweetalert2/sweetalert2.js | 3121 ++++++++++++++++ .../libs/sweetalert2/sweetalert2.min.css | 1 + .../libs/sweetalert2/sweetalert2.min.js | 1 + .../libs/sweetalert2/sweetalert2.all.js | 3123 +++++++++++++++++ .../libs/sweetalert2/sweetalert2.all.min.js | 2 + .../wwwroot/libs/sweetalert2/sweetalert2.css | 1319 +++++++ .../wwwroot/libs/sweetalert2/sweetalert2.js | 3121 ++++++++++++++++ .../libs/sweetalert2/sweetalert2.min.css | 1 + .../libs/sweetalert2/sweetalert2.min.js | 1 + 46 files changed, 45452 insertions(+), 10 deletions(-) create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.js create mode 100644 modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.js create mode 100644 modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.min.js create mode 100644 modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.css create mode 100644 modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.js create mode 100644 modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.css create mode 100644 modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js create mode 100644 modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js create mode 100644 modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js create mode 100644 modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css create mode 100644 modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js create mode 100644 modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css create mode 100644 modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js diff --git a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs index ec7b28053a..75ab3eec75 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs +++ b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs @@ -31,6 +31,7 @@ using Volo.Abp.Identity; using Volo.Abp.Identity.Web; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement; +using Volo.Abp.PermissionManagement.HttpApi; using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.Threading; using Volo.Abp.UI; @@ -44,8 +45,8 @@ namespace Volo.BloggingTestApp { [DependsOn( typeof(BloggingWebModule), - typeof(BloggingHttpApiModule), typeof(BloggingApplicationModule), + typeof(BloggingHttpApiModule), typeof(BloggingAdminWebModule), typeof(BloggingAdminHttpApiModule), typeof(BloggingAdminApplicationModule), @@ -55,12 +56,14 @@ namespace Volo.BloggingTestApp typeof(BloggingTestAppEntityFrameworkCoreModule), #endif typeof(AbpAccountWebModule), + typeof(AbpAccountHttpApiModule), typeof(AbpAccountApplicationModule), typeof(AbpIdentityWebModule), typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityApplicationModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpPermissionManagementApplicationModule), + typeof(AbpPermissionManagementHttpApiModule), typeof(BlobStoringDatabaseDomainModule), typeof(AbpAutofacModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule) diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 075632d0d1..17e68720cb 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -15,19 +15,19 @@ - - - + + + + + - - @@ -35,7 +35,9 @@ + + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs index 89a0d57921..d40541188d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs @@ -49,6 +49,7 @@ namespace Volo.CmsKit [DependsOn( typeof(AbpAccountWebIdentityServerModule), typeof(AbpAccountApplicationModule), + typeof(AbpAccountHttpApiModule), typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj index d840257465..423fe78ad3 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj @@ -23,6 +23,7 @@ + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js new file mode 100644 index 0000000000..8cbddafe42 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js @@ -0,0 +1,3123 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
\n \n
    \n
    \n \n

    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
    \n \n
    \n
    \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
    ").concat(content, "
    "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
    in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
    '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} + +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js new file mode 100644 index 0000000000..57ff7ff176 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
    \n \n
      \n
      \n \n

      \n
      \n \n \n
      \n \n \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
      \n \n
      \n
      \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
      ').concat(e,"
      "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
      ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css new file mode 100644 index 0000000000..1feb7a5581 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css @@ -0,0 +1,1319 @@ +.swal2-popup.swal2-toast { + box-sizing: border-box; + grid-column: 1/4 !important; + grid-row: 1/4 !important; + grid-template-columns: 1fr 99fr 1fr; + padding: 1em; + overflow-y: hidden; + background: #fff; + box-shadow: 0 0 0.625em #d9d9d9; + pointer-events: all; +} +.swal2-popup.swal2-toast > * { + grid-column: 2; +} +.swal2-popup.swal2-toast .swal2-title { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-loading { + justify-content: center; +} +.swal2-popup.swal2-toast .swal2-input { + height: 2em; + margin: 0.5em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-validation-message { + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-footer { + margin: 0.5em 0 0; + padding: 0.5em 0 0; + font-size: 0.8em; +} +.swal2-popup.swal2-toast .swal2-close { + grid-column: 3/3; + grid-row: 1/99; + align-self: center; + width: 0.8em; + height: 0.8em; + margin: 0; + font-size: 2em; +} +.swal2-popup.swal2-toast .swal2-html-container { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-html-container:empty { + padding: 0; +} +.swal2-popup.swal2-toast .swal2-loader { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + height: 2em; + margin: 0.25em; +} +.swal2-popup.swal2-toast .swal2-icon { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + min-width: 2em; + height: 2em; + margin: 0 0.5em 0 0; +} +.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 1.8em; + font-weight: bold; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { + top: 0.875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-actions { + justify-content: flex-start; + height: auto; + margin: 0; + margin-top: 0.3125em; + padding: 0; +} +.swal2-popup.swal2-toast .swal2-styled { + margin: 0.25em 0.5em; + padding: 0.4em 0.6em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-styled:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-popup.swal2-toast .swal2-success { + border-color: #a5dc86; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 1.6em; + height: 3em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.8em; + left: -0.5em; + transform: rotate(-45deg); + transform-origin: 2em 2em; + border-radius: 4em 0 0 4em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.25em; + left: 0.9375em; + transform-origin: 0 1.5em; + border-radius: 0 4em 4em 0; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { + top: 0; + left: 0.4375em; + width: 0.4375em; + height: 2.6875em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { + height: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { + top: 1.125em; + left: 0.1875em; + width: 0.75em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-toast-animate-success-line-tip 0.75s; + animation: swal2-toast-animate-success-line-tip 0.75s; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-toast-animate-success-line-long 0.75s; + animation: swal2-toast-animate-success-line-long 0.75s; +} +.swal2-popup.swal2-toast.swal2-show { + -webkit-animation: swal2-toast-show 0.5s; + animation: swal2-toast-show 0.5s; +} +.swal2-popup.swal2-toast.swal2-hide { + -webkit-animation: swal2-toast-hide 0.1s forwards; + animation: swal2-toast-hide 0.1s forwards; +} + +.swal2-container { + display: grid; + position: fixed; + z-index: 1060; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; + grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; + grid-template-rows: minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto); + grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); + height: 100%; + padding: 0.625em; + overflow-x: hidden; + transition: background-color 0.1s; + -webkit-overflow-scrolling: touch; +} +.swal2-container.swal2-backdrop-show, .swal2-container.swal2-noanimation { + background: rgba(0, 0, 0, 0.4); +} +.swal2-container.swal2-backdrop-hide { + background: transparent !important; +} +.swal2-container.swal2-top-start, .swal2-container.swal2-center-start, .swal2-container.swal2-bottom-start { + grid-template-columns: minmax(0, 1fr) auto auto; +} +.swal2-container.swal2-top, .swal2-container.swal2-center, .swal2-container.swal2-bottom { + grid-template-columns: auto minmax(0, 1fr) auto; +} +.swal2-container.swal2-top-end, .swal2-container.swal2-center-end, .swal2-container.swal2-bottom-end { + grid-template-columns: auto auto minmax(0, 1fr); +} +.swal2-container.swal2-top-start > .swal2-popup { + align-self: start; +} +.swal2-container.swal2-top > .swal2-popup { + grid-column: 2; + align-self: start; + justify-self: center; +} +.swal2-container.swal2-top-end > .swal2-popup, .swal2-container.swal2-top-right > .swal2-popup { + grid-column: 3; + align-self: start; + justify-self: end; +} +.swal2-container.swal2-center-start > .swal2-popup, .swal2-container.swal2-center-left > .swal2-popup { + grid-row: 2; + align-self: center; +} +.swal2-container.swal2-center > .swal2-popup { + grid-column: 2; + grid-row: 2; + align-self: center; + justify-self: center; +} +.swal2-container.swal2-center-end > .swal2-popup, .swal2-container.swal2-center-right > .swal2-popup { + grid-column: 3; + grid-row: 2; + align-self: center; + justify-self: end; +} +.swal2-container.swal2-bottom-start > .swal2-popup, .swal2-container.swal2-bottom-left > .swal2-popup { + grid-column: 1; + grid-row: 3; + align-self: end; +} +.swal2-container.swal2-bottom > .swal2-popup { + grid-column: 2; + grid-row: 3; + justify-self: center; + align-self: end; +} +.swal2-container.swal2-bottom-end > .swal2-popup, .swal2-container.swal2-bottom-right > .swal2-popup { + grid-column: 3; + grid-row: 3; + align-self: end; + justify-self: end; +} +.swal2-container.swal2-grow-row > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-column: 1/4; + width: 100%; +} +.swal2-container.swal2-grow-column > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-row: 1/4; + align-self: stretch; +} +.swal2-container.swal2-no-transition { + transition: none !important; +} + +.swal2-popup { + display: none; + position: relative; + box-sizing: border-box; + grid-template-columns: minmax(0, 100%); + width: 32em; + max-width: 100%; + padding: 0 0 1.25em; + border: none; + border-radius: 5px; + background: #fff; + color: #545454; + font-family: inherit; + font-size: 1rem; +} +.swal2-popup:focus { + outline: none; +} +.swal2-popup.swal2-loading { + overflow-y: hidden; +} + +.swal2-title { + position: relative; + max-width: 100%; + margin: 0; + padding: 0.8em 1em 0; + color: #595959; + font-size: 1.875em; + font-weight: 600; + text-align: center; + text-transform: none; + word-wrap: break-word; +} + +.swal2-actions { + display: flex; + z-index: 1; + box-sizing: border-box; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: auto; + margin: 1.25em auto 0; + padding: 0; +} +.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { + opacity: 0.4; +} +.swal2-actions:not(.swal2-loading) .swal2-styled:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); +} +.swal2-actions:not(.swal2-loading) .swal2-styled:active { + background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); +} + +.swal2-loader { + display: none; + align-items: center; + justify-content: center; + width: 2.2em; + height: 2.2em; + margin: 0 1.875em; + -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + border-width: 0.25em; + border-style: solid; + border-radius: 100%; + border-color: #2778c4 transparent #2778c4 transparent; +} + +.swal2-styled { + margin: 0.3125em; + padding: 0.625em 1.1em; + transition: box-shadow 0.1s; + box-shadow: 0 0 0 3px transparent; + font-weight: 500; +} +.swal2-styled:not([disabled]) { + cursor: pointer; +} +.swal2-styled.swal2-confirm { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #7367f0; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-confirm:focus { + box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.5); +} +.swal2-styled.swal2-deny { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #ea5455; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-deny:focus { + box-shadow: 0 0 0 3px rgba(234, 84, 85, 0.5); +} +.swal2-styled.swal2-cancel { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #6e7d88; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-cancel:focus { + box-shadow: 0 0 0 3px rgba(110, 125, 136, 0.5); +} +.swal2-styled.swal2-default-outline:focus { + box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-styled:focus { + outline: none; +} +.swal2-styled::-moz-focus-inner { + border: 0; +} + +.swal2-footer { + justify-content: center; + margin: 1em 0 0; + padding: 1em 1em 0; + border-top: 1px solid #eee; + color: #545454; + font-size: 1em; +} + +.swal2-timer-progress-bar-container { + position: absolute; + right: 0; + bottom: 0; + left: 0; + grid-column: auto !important; + height: 0.25em; + overflow: hidden; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +.swal2-timer-progress-bar { + width: 100%; + height: 0.25em; + background: rgba(0, 0, 0, 0.2); +} + +.swal2-image { + max-width: 100%; + margin: 2em auto 1em; +} + +.swal2-close { + z-index: 2; + align-items: center; + justify-content: center; + width: 1.2em; + height: 1.2em; + margin-top: 0; + margin-right: 0; + margin-bottom: -1.2em; + padding: 0; + overflow: hidden; + transition: color 0.1s, box-shadow 0.1s; + border: none; + border-radius: 5px; + background: transparent; + color: #ccc; + font-family: serif; + font-family: monospace; + font-size: 2.5em; + cursor: pointer; + justify-self: end; +} +.swal2-close:hover { + transform: none; + background: transparent; + color: #f27474; +} +.swal2-close:focus { + outline: none; + box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-close::-moz-focus-inner { + border: 0; +} + +.swal2-html-container { + z-index: 1; + justify-content: center; + margin: 1em 1.6em 0.3em; + padding: 0; + overflow: auto; + color: #545454; + font-size: 1.125em; + font-weight: normal; + line-height: normal; + text-align: center; + word-wrap: break-word; + word-break: break-word; +} + +.swal2-input, +.swal2-file, +.swal2-textarea, +.swal2-select, +.swal2-radio, +.swal2-checkbox { + margin: 1em 2em 0; +} + +.swal2-input, +.swal2-file, +.swal2-textarea { + box-sizing: border-box; + width: auto; + transition: border-color 0.1s, box-shadow 0.1s; + border: 1px solid #d9d9d9; + border-radius: 0.1875em; + background: inherit; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; + color: inherit; + font-size: 1.125em; +} +.swal2-input.swal2-inputerror, +.swal2-file.swal2-inputerror, +.swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; +} +.swal2-input:focus, +.swal2-file:focus, +.swal2-textarea:focus { + border: 1px solid #b4dbed; + outline: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder { + color: #ccc; +} +.swal2-input:-ms-input-placeholder, .swal2-file:-ms-input-placeholder, .swal2-textarea:-ms-input-placeholder { + color: #ccc; +} +.swal2-input::placeholder, +.swal2-file::placeholder, +.swal2-textarea::placeholder { + color: #ccc; +} + +.swal2-range { + margin: 1em 2em 0; + background: #fff; +} +.swal2-range input { + width: 80%; +} +.swal2-range output { + width: 20%; + color: inherit; + font-weight: 600; + text-align: center; +} +.swal2-range input, +.swal2-range output { + height: 2.625em; + padding: 0; + font-size: 1.125em; + line-height: 2.625em; +} + +.swal2-input { + height: 2.625em; + padding: 0 0.75em; +} + +.swal2-file { + width: 75%; + margin-right: auto; + margin-left: auto; + background: inherit; + font-size: 1.125em; +} + +.swal2-textarea { + height: 6.75em; + padding: 0.75em; +} + +.swal2-select { + min-width: 50%; + max-width: 100%; + padding: 0.375em 0.625em; + background: inherit; + color: inherit; + font-size: 1.125em; +} + +.swal2-radio, +.swal2-checkbox { + align-items: center; + justify-content: center; + background: #fff; + color: inherit; +} +.swal2-radio label, +.swal2-checkbox label { + margin: 0 0.6em; + font-size: 1.125em; +} +.swal2-radio input, +.swal2-checkbox input { + flex-shrink: 0; + margin: 0 0.4em; +} + +.swal2-input-label { + display: flex; + justify-content: center; + margin: 1em auto 0; +} + +.swal2-validation-message { + align-items: center; + justify-content: center; + margin: 1em 0 0; + padding: 0.625em; + overflow: hidden; + background: #f0f0f0; + color: #666666; + font-size: 1em; + font-weight: 300; +} +.swal2-validation-message::before { + content: "!"; + display: inline-block; + width: 1.5em; + min-width: 1.5em; + height: 1.5em; + margin: 0 0.625em; + border-radius: 50%; + background-color: #f27474; + color: #fff; + font-weight: 600; + line-height: 1.5em; + text-align: center; +} + +.swal2-icon { + position: relative; + box-sizing: content-box; + justify-content: center; + width: 5em; + height: 5em; + margin: 2.5em auto 0.6em; + border: 0.25em solid transparent; + border-radius: 50%; + border-color: #000; + font-family: inherit; + line-height: 5em; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 3.75em; +} +.swal2-icon.swal2-error { + border-color: #f27474; + color: #f27474; +} +.swal2-icon.swal2-error .swal2-x-mark { + position: relative; + flex-grow: 1; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line] { + display: block; + position: absolute; + top: 2.3125em; + width: 2.9375em; + height: 0.3125em; + border-radius: 0.125em; + background-color: #f27474; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 1.0625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 1em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-error.swal2-icon-show { + -webkit-animation: swal2-animate-error-icon 0.5s; + animation: swal2-animate-error-icon 0.5s; +} +.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { + -webkit-animation: swal2-animate-error-x-mark 0.5s; + animation: swal2-animate-error-x-mark 0.5s; +} +.swal2-icon.swal2-warning { + border-color: #facea8; + color: #f8bb86; +} +.swal2-icon.swal2-info { + border-color: #9de0f6; + color: #3fc3ee; +} +.swal2-icon.swal2-question { + border-color: #c9dae1; + color: #87adbd; +} +.swal2-icon.swal2-success { + border-color: #a5dc86; + color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 3.75em; + height: 7.5em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.4375em; + left: -2.0635em; + transform: rotate(-45deg); + transform-origin: 3.75em 3.75em; + border-radius: 7.5em 0 0 7.5em; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.6875em; + left: 1.875em; + transform: rotate(-45deg); + transform-origin: 0 3.75em; + border-radius: 0 7.5em 7.5em 0; +} +.swal2-icon.swal2-success .swal2-success-ring { + position: absolute; + z-index: 2; + top: -0.25em; + left: -0.25em; + box-sizing: content-box; + width: 100%; + height: 100%; + border: 0.25em solid rgba(165, 220, 134, 0.3); + border-radius: 50%; +} +.swal2-icon.swal2-success .swal2-success-fix { + position: absolute; + z-index: 1; + top: 0.5em; + left: 1.625em; + width: 0.4375em; + height: 5.625em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line] { + display: block; + position: absolute; + z-index: 2; + height: 0.3125em; + border-radius: 0.125em; + background-color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.875em; + left: 0.8125em; + width: 1.5625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-animate-success-line-tip 0.75s; + animation: swal2-animate-success-line-tip 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-animate-success-line-long 0.75s; + animation: swal2-animate-success-line-long 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { + -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in; + animation: swal2-rotate-success-circular-line 4.25s ease-in; +} + +.swal2-progress-steps { + flex-wrap: wrap; + align-items: center; + max-width: 100%; + margin: 1.25em auto; + padding: 0; + background: inherit; + font-weight: 600; +} +.swal2-progress-steps li { + display: inline-block; + position: relative; +} +.swal2-progress-steps .swal2-progress-step { + z-index: 20; + flex-shrink: 0; + width: 2em; + height: 2em; + border-radius: 2em; + background: #2778c4; + color: #fff; + line-height: 2em; + text-align: center; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { + background: #2778c4; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step { + background: #add8e6; + color: #fff; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: #add8e6; +} +.swal2-progress-steps .swal2-progress-step-line { + z-index: 10; + flex-shrink: 0; + width: 2.5em; + height: 0.4em; + margin: 0 -1px; + background: #2778c4; +} + +[class^=swal2] { + -webkit-tap-highlight-color: transparent; +} + +.swal2-show { + -webkit-animation: swal2-show 0.3s; + animation: swal2-show 0.3s; +} + +.swal2-hide { + -webkit-animation: swal2-hide 0.15s forwards; + animation: swal2-hide 0.15s forwards; +} + +.swal2-noanimation { + transition: none; +} + +.swal2-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.swal2-rtl .swal2-close { + margin-right: initial; + margin-left: 0; +} +.swal2-rtl .swal2-timer-progress-bar { + right: 0; + left: auto; +} + +@-webkit-keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} + +@keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} +@-webkit-keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@-webkit-keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@-webkit-keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@-webkit-keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@-webkit-keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@-webkit-keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@-webkit-keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow: hidden; +} +body.swal2-height-auto { + height: auto !important; +} +body.swal2-no-backdrop .swal2-container { + background-color: transparent !important; + pointer-events: none; +} +body.swal2-no-backdrop .swal2-container .swal2-popup { + pointer-events: all; +} +body.swal2-no-backdrop .swal2-container .swal2-modal { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +@media print { + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow-y: scroll !important; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] { + display: none; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { + position: static !important; + } +} +body.swal2-toast-shown .swal2-container { + box-sizing: border-box; + width: 360px; + max-width: 100%; + background-color: transparent; + pointer-events: none; +} +body.swal2-toast-shown .swal2-container.swal2-top { + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right { + top: 0; + right: 0; + bottom: auto; + left: auto; +} +body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left { + top: 0; + right: auto; + bottom: auto; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-center { + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left { + top: auto; + right: auto; + bottom: 0; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-bottom { + top: auto; + right: auto; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right { + top: auto; + right: 0; + bottom: 0; + left: auto; +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js new file mode 100644 index 0000000000..e9c254f064 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js @@ -0,0 +1,3121 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
      \n \n
        \n
        \n \n

        \n
        \n \n \n
        \n \n \n
        \n \n
        \n \n \n
        \n
        \n
        \n \n \n \n
        \n
        \n
        \n
        \n
        \n
        \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
        \n \n
        \n
        \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
        ").concat(content, "
        "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
        in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
        '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css new file mode 100644 index 0000000000..25eb26f1c0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css @@ -0,0 +1 @@ +.swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js new file mode 100644 index 0000000000..9a383d5289 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
        \n \n
          \n
          \n \n

          \n
          \n \n \n
          \n \n \n
          \n \n
          \n \n \n
          \n
          \n
          \n \n \n \n
          \n
          \n
          \n
          \n
          \n
          \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
          \n \n
          \n
          \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
          ').concat(e,"
          "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
          ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js new file mode 100644 index 0000000000..8cbddafe42 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js @@ -0,0 +1,3123 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
          \n \n
            \n
            \n \n

            \n
            \n \n \n
            \n \n \n
            \n \n
            \n \n \n
            \n
            \n
            \n \n \n \n
            \n
            \n
            \n
            \n
            \n
            \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
            \n \n
            \n
            \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
            ").concat(content, "
            "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
            in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
            '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} + +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js new file mode 100644 index 0000000000..57ff7ff176 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
            \n \n
              \n
              \n \n

              \n
              \n \n \n
              \n \n \n
              \n \n
              \n \n \n
              \n
              \n
              \n \n \n \n
              \n
              \n
              \n
              \n
              \n
              \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
              \n \n
              \n
              \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
              ').concat(e,"
              "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
              ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css new file mode 100644 index 0000000000..1feb7a5581 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css @@ -0,0 +1,1319 @@ +.swal2-popup.swal2-toast { + box-sizing: border-box; + grid-column: 1/4 !important; + grid-row: 1/4 !important; + grid-template-columns: 1fr 99fr 1fr; + padding: 1em; + overflow-y: hidden; + background: #fff; + box-shadow: 0 0 0.625em #d9d9d9; + pointer-events: all; +} +.swal2-popup.swal2-toast > * { + grid-column: 2; +} +.swal2-popup.swal2-toast .swal2-title { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-loading { + justify-content: center; +} +.swal2-popup.swal2-toast .swal2-input { + height: 2em; + margin: 0.5em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-validation-message { + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-footer { + margin: 0.5em 0 0; + padding: 0.5em 0 0; + font-size: 0.8em; +} +.swal2-popup.swal2-toast .swal2-close { + grid-column: 3/3; + grid-row: 1/99; + align-self: center; + width: 0.8em; + height: 0.8em; + margin: 0; + font-size: 2em; +} +.swal2-popup.swal2-toast .swal2-html-container { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-html-container:empty { + padding: 0; +} +.swal2-popup.swal2-toast .swal2-loader { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + height: 2em; + margin: 0.25em; +} +.swal2-popup.swal2-toast .swal2-icon { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + min-width: 2em; + height: 2em; + margin: 0 0.5em 0 0; +} +.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 1.8em; + font-weight: bold; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { + top: 0.875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-actions { + justify-content: flex-start; + height: auto; + margin: 0; + margin-top: 0.3125em; + padding: 0; +} +.swal2-popup.swal2-toast .swal2-styled { + margin: 0.25em 0.5em; + padding: 0.4em 0.6em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-styled:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-popup.swal2-toast .swal2-success { + border-color: #a5dc86; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 1.6em; + height: 3em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.8em; + left: -0.5em; + transform: rotate(-45deg); + transform-origin: 2em 2em; + border-radius: 4em 0 0 4em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.25em; + left: 0.9375em; + transform-origin: 0 1.5em; + border-radius: 0 4em 4em 0; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { + top: 0; + left: 0.4375em; + width: 0.4375em; + height: 2.6875em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { + height: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { + top: 1.125em; + left: 0.1875em; + width: 0.75em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-toast-animate-success-line-tip 0.75s; + animation: swal2-toast-animate-success-line-tip 0.75s; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-toast-animate-success-line-long 0.75s; + animation: swal2-toast-animate-success-line-long 0.75s; +} +.swal2-popup.swal2-toast.swal2-show { + -webkit-animation: swal2-toast-show 0.5s; + animation: swal2-toast-show 0.5s; +} +.swal2-popup.swal2-toast.swal2-hide { + -webkit-animation: swal2-toast-hide 0.1s forwards; + animation: swal2-toast-hide 0.1s forwards; +} + +.swal2-container { + display: grid; + position: fixed; + z-index: 1060; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; + grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; + grid-template-rows: minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto); + grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); + height: 100%; + padding: 0.625em; + overflow-x: hidden; + transition: background-color 0.1s; + -webkit-overflow-scrolling: touch; +} +.swal2-container.swal2-backdrop-show, .swal2-container.swal2-noanimation { + background: rgba(0, 0, 0, 0.4); +} +.swal2-container.swal2-backdrop-hide { + background: transparent !important; +} +.swal2-container.swal2-top-start, .swal2-container.swal2-center-start, .swal2-container.swal2-bottom-start { + grid-template-columns: minmax(0, 1fr) auto auto; +} +.swal2-container.swal2-top, .swal2-container.swal2-center, .swal2-container.swal2-bottom { + grid-template-columns: auto minmax(0, 1fr) auto; +} +.swal2-container.swal2-top-end, .swal2-container.swal2-center-end, .swal2-container.swal2-bottom-end { + grid-template-columns: auto auto minmax(0, 1fr); +} +.swal2-container.swal2-top-start > .swal2-popup { + align-self: start; +} +.swal2-container.swal2-top > .swal2-popup { + grid-column: 2; + align-self: start; + justify-self: center; +} +.swal2-container.swal2-top-end > .swal2-popup, .swal2-container.swal2-top-right > .swal2-popup { + grid-column: 3; + align-self: start; + justify-self: end; +} +.swal2-container.swal2-center-start > .swal2-popup, .swal2-container.swal2-center-left > .swal2-popup { + grid-row: 2; + align-self: center; +} +.swal2-container.swal2-center > .swal2-popup { + grid-column: 2; + grid-row: 2; + align-self: center; + justify-self: center; +} +.swal2-container.swal2-center-end > .swal2-popup, .swal2-container.swal2-center-right > .swal2-popup { + grid-column: 3; + grid-row: 2; + align-self: center; + justify-self: end; +} +.swal2-container.swal2-bottom-start > .swal2-popup, .swal2-container.swal2-bottom-left > .swal2-popup { + grid-column: 1; + grid-row: 3; + align-self: end; +} +.swal2-container.swal2-bottom > .swal2-popup { + grid-column: 2; + grid-row: 3; + justify-self: center; + align-self: end; +} +.swal2-container.swal2-bottom-end > .swal2-popup, .swal2-container.swal2-bottom-right > .swal2-popup { + grid-column: 3; + grid-row: 3; + align-self: end; + justify-self: end; +} +.swal2-container.swal2-grow-row > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-column: 1/4; + width: 100%; +} +.swal2-container.swal2-grow-column > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-row: 1/4; + align-self: stretch; +} +.swal2-container.swal2-no-transition { + transition: none !important; +} + +.swal2-popup { + display: none; + position: relative; + box-sizing: border-box; + grid-template-columns: minmax(0, 100%); + width: 32em; + max-width: 100%; + padding: 0 0 1.25em; + border: none; + border-radius: 5px; + background: #fff; + color: #545454; + font-family: inherit; + font-size: 1rem; +} +.swal2-popup:focus { + outline: none; +} +.swal2-popup.swal2-loading { + overflow-y: hidden; +} + +.swal2-title { + position: relative; + max-width: 100%; + margin: 0; + padding: 0.8em 1em 0; + color: #595959; + font-size: 1.875em; + font-weight: 600; + text-align: center; + text-transform: none; + word-wrap: break-word; +} + +.swal2-actions { + display: flex; + z-index: 1; + box-sizing: border-box; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: auto; + margin: 1.25em auto 0; + padding: 0; +} +.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { + opacity: 0.4; +} +.swal2-actions:not(.swal2-loading) .swal2-styled:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); +} +.swal2-actions:not(.swal2-loading) .swal2-styled:active { + background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); +} + +.swal2-loader { + display: none; + align-items: center; + justify-content: center; + width: 2.2em; + height: 2.2em; + margin: 0 1.875em; + -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + border-width: 0.25em; + border-style: solid; + border-radius: 100%; + border-color: #2778c4 transparent #2778c4 transparent; +} + +.swal2-styled { + margin: 0.3125em; + padding: 0.625em 1.1em; + transition: box-shadow 0.1s; + box-shadow: 0 0 0 3px transparent; + font-weight: 500; +} +.swal2-styled:not([disabled]) { + cursor: pointer; +} +.swal2-styled.swal2-confirm { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #7367f0; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-confirm:focus { + box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.5); +} +.swal2-styled.swal2-deny { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #ea5455; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-deny:focus { + box-shadow: 0 0 0 3px rgba(234, 84, 85, 0.5); +} +.swal2-styled.swal2-cancel { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #6e7d88; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-cancel:focus { + box-shadow: 0 0 0 3px rgba(110, 125, 136, 0.5); +} +.swal2-styled.swal2-default-outline:focus { + box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-styled:focus { + outline: none; +} +.swal2-styled::-moz-focus-inner { + border: 0; +} + +.swal2-footer { + justify-content: center; + margin: 1em 0 0; + padding: 1em 1em 0; + border-top: 1px solid #eee; + color: #545454; + font-size: 1em; +} + +.swal2-timer-progress-bar-container { + position: absolute; + right: 0; + bottom: 0; + left: 0; + grid-column: auto !important; + height: 0.25em; + overflow: hidden; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +.swal2-timer-progress-bar { + width: 100%; + height: 0.25em; + background: rgba(0, 0, 0, 0.2); +} + +.swal2-image { + max-width: 100%; + margin: 2em auto 1em; +} + +.swal2-close { + z-index: 2; + align-items: center; + justify-content: center; + width: 1.2em; + height: 1.2em; + margin-top: 0; + margin-right: 0; + margin-bottom: -1.2em; + padding: 0; + overflow: hidden; + transition: color 0.1s, box-shadow 0.1s; + border: none; + border-radius: 5px; + background: transparent; + color: #ccc; + font-family: serif; + font-family: monospace; + font-size: 2.5em; + cursor: pointer; + justify-self: end; +} +.swal2-close:hover { + transform: none; + background: transparent; + color: #f27474; +} +.swal2-close:focus { + outline: none; + box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-close::-moz-focus-inner { + border: 0; +} + +.swal2-html-container { + z-index: 1; + justify-content: center; + margin: 1em 1.6em 0.3em; + padding: 0; + overflow: auto; + color: #545454; + font-size: 1.125em; + font-weight: normal; + line-height: normal; + text-align: center; + word-wrap: break-word; + word-break: break-word; +} + +.swal2-input, +.swal2-file, +.swal2-textarea, +.swal2-select, +.swal2-radio, +.swal2-checkbox { + margin: 1em 2em 0; +} + +.swal2-input, +.swal2-file, +.swal2-textarea { + box-sizing: border-box; + width: auto; + transition: border-color 0.1s, box-shadow 0.1s; + border: 1px solid #d9d9d9; + border-radius: 0.1875em; + background: inherit; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; + color: inherit; + font-size: 1.125em; +} +.swal2-input.swal2-inputerror, +.swal2-file.swal2-inputerror, +.swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; +} +.swal2-input:focus, +.swal2-file:focus, +.swal2-textarea:focus { + border: 1px solid #b4dbed; + outline: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder { + color: #ccc; +} +.swal2-input:-ms-input-placeholder, .swal2-file:-ms-input-placeholder, .swal2-textarea:-ms-input-placeholder { + color: #ccc; +} +.swal2-input::placeholder, +.swal2-file::placeholder, +.swal2-textarea::placeholder { + color: #ccc; +} + +.swal2-range { + margin: 1em 2em 0; + background: #fff; +} +.swal2-range input { + width: 80%; +} +.swal2-range output { + width: 20%; + color: inherit; + font-weight: 600; + text-align: center; +} +.swal2-range input, +.swal2-range output { + height: 2.625em; + padding: 0; + font-size: 1.125em; + line-height: 2.625em; +} + +.swal2-input { + height: 2.625em; + padding: 0 0.75em; +} + +.swal2-file { + width: 75%; + margin-right: auto; + margin-left: auto; + background: inherit; + font-size: 1.125em; +} + +.swal2-textarea { + height: 6.75em; + padding: 0.75em; +} + +.swal2-select { + min-width: 50%; + max-width: 100%; + padding: 0.375em 0.625em; + background: inherit; + color: inherit; + font-size: 1.125em; +} + +.swal2-radio, +.swal2-checkbox { + align-items: center; + justify-content: center; + background: #fff; + color: inherit; +} +.swal2-radio label, +.swal2-checkbox label { + margin: 0 0.6em; + font-size: 1.125em; +} +.swal2-radio input, +.swal2-checkbox input { + flex-shrink: 0; + margin: 0 0.4em; +} + +.swal2-input-label { + display: flex; + justify-content: center; + margin: 1em auto 0; +} + +.swal2-validation-message { + align-items: center; + justify-content: center; + margin: 1em 0 0; + padding: 0.625em; + overflow: hidden; + background: #f0f0f0; + color: #666666; + font-size: 1em; + font-weight: 300; +} +.swal2-validation-message::before { + content: "!"; + display: inline-block; + width: 1.5em; + min-width: 1.5em; + height: 1.5em; + margin: 0 0.625em; + border-radius: 50%; + background-color: #f27474; + color: #fff; + font-weight: 600; + line-height: 1.5em; + text-align: center; +} + +.swal2-icon { + position: relative; + box-sizing: content-box; + justify-content: center; + width: 5em; + height: 5em; + margin: 2.5em auto 0.6em; + border: 0.25em solid transparent; + border-radius: 50%; + border-color: #000; + font-family: inherit; + line-height: 5em; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 3.75em; +} +.swal2-icon.swal2-error { + border-color: #f27474; + color: #f27474; +} +.swal2-icon.swal2-error .swal2-x-mark { + position: relative; + flex-grow: 1; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line] { + display: block; + position: absolute; + top: 2.3125em; + width: 2.9375em; + height: 0.3125em; + border-radius: 0.125em; + background-color: #f27474; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 1.0625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 1em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-error.swal2-icon-show { + -webkit-animation: swal2-animate-error-icon 0.5s; + animation: swal2-animate-error-icon 0.5s; +} +.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { + -webkit-animation: swal2-animate-error-x-mark 0.5s; + animation: swal2-animate-error-x-mark 0.5s; +} +.swal2-icon.swal2-warning { + border-color: #facea8; + color: #f8bb86; +} +.swal2-icon.swal2-info { + border-color: #9de0f6; + color: #3fc3ee; +} +.swal2-icon.swal2-question { + border-color: #c9dae1; + color: #87adbd; +} +.swal2-icon.swal2-success { + border-color: #a5dc86; + color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 3.75em; + height: 7.5em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.4375em; + left: -2.0635em; + transform: rotate(-45deg); + transform-origin: 3.75em 3.75em; + border-radius: 7.5em 0 0 7.5em; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.6875em; + left: 1.875em; + transform: rotate(-45deg); + transform-origin: 0 3.75em; + border-radius: 0 7.5em 7.5em 0; +} +.swal2-icon.swal2-success .swal2-success-ring { + position: absolute; + z-index: 2; + top: -0.25em; + left: -0.25em; + box-sizing: content-box; + width: 100%; + height: 100%; + border: 0.25em solid rgba(165, 220, 134, 0.3); + border-radius: 50%; +} +.swal2-icon.swal2-success .swal2-success-fix { + position: absolute; + z-index: 1; + top: 0.5em; + left: 1.625em; + width: 0.4375em; + height: 5.625em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line] { + display: block; + position: absolute; + z-index: 2; + height: 0.3125em; + border-radius: 0.125em; + background-color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.875em; + left: 0.8125em; + width: 1.5625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-animate-success-line-tip 0.75s; + animation: swal2-animate-success-line-tip 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-animate-success-line-long 0.75s; + animation: swal2-animate-success-line-long 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { + -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in; + animation: swal2-rotate-success-circular-line 4.25s ease-in; +} + +.swal2-progress-steps { + flex-wrap: wrap; + align-items: center; + max-width: 100%; + margin: 1.25em auto; + padding: 0; + background: inherit; + font-weight: 600; +} +.swal2-progress-steps li { + display: inline-block; + position: relative; +} +.swal2-progress-steps .swal2-progress-step { + z-index: 20; + flex-shrink: 0; + width: 2em; + height: 2em; + border-radius: 2em; + background: #2778c4; + color: #fff; + line-height: 2em; + text-align: center; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { + background: #2778c4; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step { + background: #add8e6; + color: #fff; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: #add8e6; +} +.swal2-progress-steps .swal2-progress-step-line { + z-index: 10; + flex-shrink: 0; + width: 2.5em; + height: 0.4em; + margin: 0 -1px; + background: #2778c4; +} + +[class^=swal2] { + -webkit-tap-highlight-color: transparent; +} + +.swal2-show { + -webkit-animation: swal2-show 0.3s; + animation: swal2-show 0.3s; +} + +.swal2-hide { + -webkit-animation: swal2-hide 0.15s forwards; + animation: swal2-hide 0.15s forwards; +} + +.swal2-noanimation { + transition: none; +} + +.swal2-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.swal2-rtl .swal2-close { + margin-right: initial; + margin-left: 0; +} +.swal2-rtl .swal2-timer-progress-bar { + right: 0; + left: auto; +} + +@-webkit-keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} + +@keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} +@-webkit-keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@-webkit-keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@-webkit-keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@-webkit-keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@-webkit-keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@-webkit-keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@-webkit-keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow: hidden; +} +body.swal2-height-auto { + height: auto !important; +} +body.swal2-no-backdrop .swal2-container { + background-color: transparent !important; + pointer-events: none; +} +body.swal2-no-backdrop .swal2-container .swal2-popup { + pointer-events: all; +} +body.swal2-no-backdrop .swal2-container .swal2-modal { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +@media print { + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow-y: scroll !important; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] { + display: none; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { + position: static !important; + } +} +body.swal2-toast-shown .swal2-container { + box-sizing: border-box; + width: 360px; + max-width: 100%; + background-color: transparent; + pointer-events: none; +} +body.swal2-toast-shown .swal2-container.swal2-top { + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right { + top: 0; + right: 0; + bottom: auto; + left: auto; +} +body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left { + top: 0; + right: auto; + bottom: auto; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-center { + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left { + top: auto; + right: auto; + bottom: 0; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-bottom { + top: auto; + right: auto; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right { + top: auto; + right: 0; + bottom: 0; + left: auto; +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js new file mode 100644 index 0000000000..e9c254f064 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js @@ -0,0 +1,3121 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
              \n \n
                \n
                \n \n

                \n
                \n \n \n
                \n \n \n
                \n \n
                \n \n \n
                \n
                \n
                \n \n \n \n
                \n
                \n
                \n
                \n
                \n
                \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                \n \n
                \n
                \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                ").concat(content, "
                "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css new file mode 100644 index 0000000000..25eb26f1c0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css @@ -0,0 +1 @@ +.swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js new file mode 100644 index 0000000000..9a383d5289 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                \n \n
                  \n
                  \n \n

                  \n
                  \n \n \n
                  \n \n \n
                  \n \n
                  \n \n \n
                  \n
                  \n
                  \n \n \n \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                  \n \n
                  \n
                  \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                  ').concat(e,"
                  "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                  ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs index 40ac74d788..bfa436984b 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs @@ -40,6 +40,7 @@ using Volo.Abp.VirtualFileSystem; using Volo.CmsKit.Admin.Web; using Volo.CmsKit.Public.Web; using System; +using Volo.Abp.PermissionManagement.HttpApi; using Volo.CmsKit.Tags; using Volo.CmsKit.Comments; using Volo.CmsKit.MediaDescriptors; @@ -51,24 +52,30 @@ namespace Volo.CmsKit [DependsOn( typeof(CmsKitWebModule), typeof(CmsKitApplicationModule), + typeof(CmsKitHttpApiModule), typeof(CmsKitEntityFrameworkCoreModule), typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpAutofacModule), typeof(AbpAccountWebModule), typeof(AbpAccountApplicationModule), + typeof(AbpAccountHttpApiModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementApplicationModule), + typeof(AbpPermissionManagementHttpApiModule), typeof(AbpIdentityWebModule), typeof(AbpIdentityApplicationModule), + typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpFeatureManagementApplicationModule), + typeof(AbpFeatureManagementHttpApiModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementWebModule), typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementApplicationModule), + typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreSerilogModule), @@ -161,11 +168,11 @@ namespace Volo.CmsKit { options.EntityTypes.Add(new MediaDescriptorDefinition("quote")); }); - + Configure(options => { options.EntityTypes.Add( - new ReactionEntityTypeDefinition("quote", + new ReactionEntityTypeDefinition("quote", reactions: new[] { new ReactionDefinition(StandardReactions.ThumbsUp), diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj index 70fe0968ce..8a0140e03b 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj @@ -19,17 +19,22 @@ + + + + + @@ -37,6 +42,7 @@ + diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.js new file mode 100644 index 0000000000..8cbddafe42 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.js @@ -0,0 +1,3123 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                  \n \n
                    \n
                    \n \n

                    \n
                    \n \n \n
                    \n \n \n
                    \n \n
                    \n \n \n
                    \n
                    \n
                    \n \n \n \n
                    \n
                    \n
                    \n
                    \n
                    \n
                    \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                    \n \n
                    \n
                    \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                    ").concat(content, "
                    "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                    in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                    '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} + +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.min.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.min.js new file mode 100644 index 0000000000..57ff7ff176 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                    \n \n
                      \n
                      \n \n

                      \n
                      \n \n \n
                      \n \n \n
                      \n \n
                      \n \n \n
                      \n
                      \n
                      \n \n \n \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                      \n \n
                      \n
                      \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                      ').concat(e,"
                      "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                      ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.css new file mode 100644 index 0000000000..1feb7a5581 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.css @@ -0,0 +1,1319 @@ +.swal2-popup.swal2-toast { + box-sizing: border-box; + grid-column: 1/4 !important; + grid-row: 1/4 !important; + grid-template-columns: 1fr 99fr 1fr; + padding: 1em; + overflow-y: hidden; + background: #fff; + box-shadow: 0 0 0.625em #d9d9d9; + pointer-events: all; +} +.swal2-popup.swal2-toast > * { + grid-column: 2; +} +.swal2-popup.swal2-toast .swal2-title { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-loading { + justify-content: center; +} +.swal2-popup.swal2-toast .swal2-input { + height: 2em; + margin: 0.5em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-validation-message { + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-footer { + margin: 0.5em 0 0; + padding: 0.5em 0 0; + font-size: 0.8em; +} +.swal2-popup.swal2-toast .swal2-close { + grid-column: 3/3; + grid-row: 1/99; + align-self: center; + width: 0.8em; + height: 0.8em; + margin: 0; + font-size: 2em; +} +.swal2-popup.swal2-toast .swal2-html-container { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-html-container:empty { + padding: 0; +} +.swal2-popup.swal2-toast .swal2-loader { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + height: 2em; + margin: 0.25em; +} +.swal2-popup.swal2-toast .swal2-icon { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + min-width: 2em; + height: 2em; + margin: 0 0.5em 0 0; +} +.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 1.8em; + font-weight: bold; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { + top: 0.875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-actions { + justify-content: flex-start; + height: auto; + margin: 0; + margin-top: 0.3125em; + padding: 0; +} +.swal2-popup.swal2-toast .swal2-styled { + margin: 0.25em 0.5em; + padding: 0.4em 0.6em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-styled:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-popup.swal2-toast .swal2-success { + border-color: #a5dc86; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 1.6em; + height: 3em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.8em; + left: -0.5em; + transform: rotate(-45deg); + transform-origin: 2em 2em; + border-radius: 4em 0 0 4em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.25em; + left: 0.9375em; + transform-origin: 0 1.5em; + border-radius: 0 4em 4em 0; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { + top: 0; + left: 0.4375em; + width: 0.4375em; + height: 2.6875em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { + height: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { + top: 1.125em; + left: 0.1875em; + width: 0.75em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-toast-animate-success-line-tip 0.75s; + animation: swal2-toast-animate-success-line-tip 0.75s; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-toast-animate-success-line-long 0.75s; + animation: swal2-toast-animate-success-line-long 0.75s; +} +.swal2-popup.swal2-toast.swal2-show { + -webkit-animation: swal2-toast-show 0.5s; + animation: swal2-toast-show 0.5s; +} +.swal2-popup.swal2-toast.swal2-hide { + -webkit-animation: swal2-toast-hide 0.1s forwards; + animation: swal2-toast-hide 0.1s forwards; +} + +.swal2-container { + display: grid; + position: fixed; + z-index: 1060; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; + grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; + grid-template-rows: minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto); + grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); + height: 100%; + padding: 0.625em; + overflow-x: hidden; + transition: background-color 0.1s; + -webkit-overflow-scrolling: touch; +} +.swal2-container.swal2-backdrop-show, .swal2-container.swal2-noanimation { + background: rgba(0, 0, 0, 0.4); +} +.swal2-container.swal2-backdrop-hide { + background: transparent !important; +} +.swal2-container.swal2-top-start, .swal2-container.swal2-center-start, .swal2-container.swal2-bottom-start { + grid-template-columns: minmax(0, 1fr) auto auto; +} +.swal2-container.swal2-top, .swal2-container.swal2-center, .swal2-container.swal2-bottom { + grid-template-columns: auto minmax(0, 1fr) auto; +} +.swal2-container.swal2-top-end, .swal2-container.swal2-center-end, .swal2-container.swal2-bottom-end { + grid-template-columns: auto auto minmax(0, 1fr); +} +.swal2-container.swal2-top-start > .swal2-popup { + align-self: start; +} +.swal2-container.swal2-top > .swal2-popup { + grid-column: 2; + align-self: start; + justify-self: center; +} +.swal2-container.swal2-top-end > .swal2-popup, .swal2-container.swal2-top-right > .swal2-popup { + grid-column: 3; + align-self: start; + justify-self: end; +} +.swal2-container.swal2-center-start > .swal2-popup, .swal2-container.swal2-center-left > .swal2-popup { + grid-row: 2; + align-self: center; +} +.swal2-container.swal2-center > .swal2-popup { + grid-column: 2; + grid-row: 2; + align-self: center; + justify-self: center; +} +.swal2-container.swal2-center-end > .swal2-popup, .swal2-container.swal2-center-right > .swal2-popup { + grid-column: 3; + grid-row: 2; + align-self: center; + justify-self: end; +} +.swal2-container.swal2-bottom-start > .swal2-popup, .swal2-container.swal2-bottom-left > .swal2-popup { + grid-column: 1; + grid-row: 3; + align-self: end; +} +.swal2-container.swal2-bottom > .swal2-popup { + grid-column: 2; + grid-row: 3; + justify-self: center; + align-self: end; +} +.swal2-container.swal2-bottom-end > .swal2-popup, .swal2-container.swal2-bottom-right > .swal2-popup { + grid-column: 3; + grid-row: 3; + align-self: end; + justify-self: end; +} +.swal2-container.swal2-grow-row > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-column: 1/4; + width: 100%; +} +.swal2-container.swal2-grow-column > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-row: 1/4; + align-self: stretch; +} +.swal2-container.swal2-no-transition { + transition: none !important; +} + +.swal2-popup { + display: none; + position: relative; + box-sizing: border-box; + grid-template-columns: minmax(0, 100%); + width: 32em; + max-width: 100%; + padding: 0 0 1.25em; + border: none; + border-radius: 5px; + background: #fff; + color: #545454; + font-family: inherit; + font-size: 1rem; +} +.swal2-popup:focus { + outline: none; +} +.swal2-popup.swal2-loading { + overflow-y: hidden; +} + +.swal2-title { + position: relative; + max-width: 100%; + margin: 0; + padding: 0.8em 1em 0; + color: #595959; + font-size: 1.875em; + font-weight: 600; + text-align: center; + text-transform: none; + word-wrap: break-word; +} + +.swal2-actions { + display: flex; + z-index: 1; + box-sizing: border-box; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: auto; + margin: 1.25em auto 0; + padding: 0; +} +.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { + opacity: 0.4; +} +.swal2-actions:not(.swal2-loading) .swal2-styled:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); +} +.swal2-actions:not(.swal2-loading) .swal2-styled:active { + background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); +} + +.swal2-loader { + display: none; + align-items: center; + justify-content: center; + width: 2.2em; + height: 2.2em; + margin: 0 1.875em; + -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + border-width: 0.25em; + border-style: solid; + border-radius: 100%; + border-color: #2778c4 transparent #2778c4 transparent; +} + +.swal2-styled { + margin: 0.3125em; + padding: 0.625em 1.1em; + transition: box-shadow 0.1s; + box-shadow: 0 0 0 3px transparent; + font-weight: 500; +} +.swal2-styled:not([disabled]) { + cursor: pointer; +} +.swal2-styled.swal2-confirm { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #7367f0; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-confirm:focus { + box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.5); +} +.swal2-styled.swal2-deny { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #ea5455; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-deny:focus { + box-shadow: 0 0 0 3px rgba(234, 84, 85, 0.5); +} +.swal2-styled.swal2-cancel { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #6e7d88; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-cancel:focus { + box-shadow: 0 0 0 3px rgba(110, 125, 136, 0.5); +} +.swal2-styled.swal2-default-outline:focus { + box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-styled:focus { + outline: none; +} +.swal2-styled::-moz-focus-inner { + border: 0; +} + +.swal2-footer { + justify-content: center; + margin: 1em 0 0; + padding: 1em 1em 0; + border-top: 1px solid #eee; + color: #545454; + font-size: 1em; +} + +.swal2-timer-progress-bar-container { + position: absolute; + right: 0; + bottom: 0; + left: 0; + grid-column: auto !important; + height: 0.25em; + overflow: hidden; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +.swal2-timer-progress-bar { + width: 100%; + height: 0.25em; + background: rgba(0, 0, 0, 0.2); +} + +.swal2-image { + max-width: 100%; + margin: 2em auto 1em; +} + +.swal2-close { + z-index: 2; + align-items: center; + justify-content: center; + width: 1.2em; + height: 1.2em; + margin-top: 0; + margin-right: 0; + margin-bottom: -1.2em; + padding: 0; + overflow: hidden; + transition: color 0.1s, box-shadow 0.1s; + border: none; + border-radius: 5px; + background: transparent; + color: #ccc; + font-family: serif; + font-family: monospace; + font-size: 2.5em; + cursor: pointer; + justify-self: end; +} +.swal2-close:hover { + transform: none; + background: transparent; + color: #f27474; +} +.swal2-close:focus { + outline: none; + box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-close::-moz-focus-inner { + border: 0; +} + +.swal2-html-container { + z-index: 1; + justify-content: center; + margin: 1em 1.6em 0.3em; + padding: 0; + overflow: auto; + color: #545454; + font-size: 1.125em; + font-weight: normal; + line-height: normal; + text-align: center; + word-wrap: break-word; + word-break: break-word; +} + +.swal2-input, +.swal2-file, +.swal2-textarea, +.swal2-select, +.swal2-radio, +.swal2-checkbox { + margin: 1em 2em 0; +} + +.swal2-input, +.swal2-file, +.swal2-textarea { + box-sizing: border-box; + width: auto; + transition: border-color 0.1s, box-shadow 0.1s; + border: 1px solid #d9d9d9; + border-radius: 0.1875em; + background: inherit; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; + color: inherit; + font-size: 1.125em; +} +.swal2-input.swal2-inputerror, +.swal2-file.swal2-inputerror, +.swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; +} +.swal2-input:focus, +.swal2-file:focus, +.swal2-textarea:focus { + border: 1px solid #b4dbed; + outline: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder { + color: #ccc; +} +.swal2-input:-ms-input-placeholder, .swal2-file:-ms-input-placeholder, .swal2-textarea:-ms-input-placeholder { + color: #ccc; +} +.swal2-input::placeholder, +.swal2-file::placeholder, +.swal2-textarea::placeholder { + color: #ccc; +} + +.swal2-range { + margin: 1em 2em 0; + background: #fff; +} +.swal2-range input { + width: 80%; +} +.swal2-range output { + width: 20%; + color: inherit; + font-weight: 600; + text-align: center; +} +.swal2-range input, +.swal2-range output { + height: 2.625em; + padding: 0; + font-size: 1.125em; + line-height: 2.625em; +} + +.swal2-input { + height: 2.625em; + padding: 0 0.75em; +} + +.swal2-file { + width: 75%; + margin-right: auto; + margin-left: auto; + background: inherit; + font-size: 1.125em; +} + +.swal2-textarea { + height: 6.75em; + padding: 0.75em; +} + +.swal2-select { + min-width: 50%; + max-width: 100%; + padding: 0.375em 0.625em; + background: inherit; + color: inherit; + font-size: 1.125em; +} + +.swal2-radio, +.swal2-checkbox { + align-items: center; + justify-content: center; + background: #fff; + color: inherit; +} +.swal2-radio label, +.swal2-checkbox label { + margin: 0 0.6em; + font-size: 1.125em; +} +.swal2-radio input, +.swal2-checkbox input { + flex-shrink: 0; + margin: 0 0.4em; +} + +.swal2-input-label { + display: flex; + justify-content: center; + margin: 1em auto 0; +} + +.swal2-validation-message { + align-items: center; + justify-content: center; + margin: 1em 0 0; + padding: 0.625em; + overflow: hidden; + background: #f0f0f0; + color: #666666; + font-size: 1em; + font-weight: 300; +} +.swal2-validation-message::before { + content: "!"; + display: inline-block; + width: 1.5em; + min-width: 1.5em; + height: 1.5em; + margin: 0 0.625em; + border-radius: 50%; + background-color: #f27474; + color: #fff; + font-weight: 600; + line-height: 1.5em; + text-align: center; +} + +.swal2-icon { + position: relative; + box-sizing: content-box; + justify-content: center; + width: 5em; + height: 5em; + margin: 2.5em auto 0.6em; + border: 0.25em solid transparent; + border-radius: 50%; + border-color: #000; + font-family: inherit; + line-height: 5em; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 3.75em; +} +.swal2-icon.swal2-error { + border-color: #f27474; + color: #f27474; +} +.swal2-icon.swal2-error .swal2-x-mark { + position: relative; + flex-grow: 1; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line] { + display: block; + position: absolute; + top: 2.3125em; + width: 2.9375em; + height: 0.3125em; + border-radius: 0.125em; + background-color: #f27474; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 1.0625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 1em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-error.swal2-icon-show { + -webkit-animation: swal2-animate-error-icon 0.5s; + animation: swal2-animate-error-icon 0.5s; +} +.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { + -webkit-animation: swal2-animate-error-x-mark 0.5s; + animation: swal2-animate-error-x-mark 0.5s; +} +.swal2-icon.swal2-warning { + border-color: #facea8; + color: #f8bb86; +} +.swal2-icon.swal2-info { + border-color: #9de0f6; + color: #3fc3ee; +} +.swal2-icon.swal2-question { + border-color: #c9dae1; + color: #87adbd; +} +.swal2-icon.swal2-success { + border-color: #a5dc86; + color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 3.75em; + height: 7.5em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.4375em; + left: -2.0635em; + transform: rotate(-45deg); + transform-origin: 3.75em 3.75em; + border-radius: 7.5em 0 0 7.5em; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.6875em; + left: 1.875em; + transform: rotate(-45deg); + transform-origin: 0 3.75em; + border-radius: 0 7.5em 7.5em 0; +} +.swal2-icon.swal2-success .swal2-success-ring { + position: absolute; + z-index: 2; + top: -0.25em; + left: -0.25em; + box-sizing: content-box; + width: 100%; + height: 100%; + border: 0.25em solid rgba(165, 220, 134, 0.3); + border-radius: 50%; +} +.swal2-icon.swal2-success .swal2-success-fix { + position: absolute; + z-index: 1; + top: 0.5em; + left: 1.625em; + width: 0.4375em; + height: 5.625em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line] { + display: block; + position: absolute; + z-index: 2; + height: 0.3125em; + border-radius: 0.125em; + background-color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.875em; + left: 0.8125em; + width: 1.5625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-animate-success-line-tip 0.75s; + animation: swal2-animate-success-line-tip 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-animate-success-line-long 0.75s; + animation: swal2-animate-success-line-long 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { + -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in; + animation: swal2-rotate-success-circular-line 4.25s ease-in; +} + +.swal2-progress-steps { + flex-wrap: wrap; + align-items: center; + max-width: 100%; + margin: 1.25em auto; + padding: 0; + background: inherit; + font-weight: 600; +} +.swal2-progress-steps li { + display: inline-block; + position: relative; +} +.swal2-progress-steps .swal2-progress-step { + z-index: 20; + flex-shrink: 0; + width: 2em; + height: 2em; + border-radius: 2em; + background: #2778c4; + color: #fff; + line-height: 2em; + text-align: center; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { + background: #2778c4; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step { + background: #add8e6; + color: #fff; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: #add8e6; +} +.swal2-progress-steps .swal2-progress-step-line { + z-index: 10; + flex-shrink: 0; + width: 2.5em; + height: 0.4em; + margin: 0 -1px; + background: #2778c4; +} + +[class^=swal2] { + -webkit-tap-highlight-color: transparent; +} + +.swal2-show { + -webkit-animation: swal2-show 0.3s; + animation: swal2-show 0.3s; +} + +.swal2-hide { + -webkit-animation: swal2-hide 0.15s forwards; + animation: swal2-hide 0.15s forwards; +} + +.swal2-noanimation { + transition: none; +} + +.swal2-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.swal2-rtl .swal2-close { + margin-right: initial; + margin-left: 0; +} +.swal2-rtl .swal2-timer-progress-bar { + right: 0; + left: auto; +} + +@-webkit-keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} + +@keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} +@-webkit-keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@-webkit-keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@-webkit-keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@-webkit-keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@-webkit-keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@-webkit-keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@-webkit-keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow: hidden; +} +body.swal2-height-auto { + height: auto !important; +} +body.swal2-no-backdrop .swal2-container { + background-color: transparent !important; + pointer-events: none; +} +body.swal2-no-backdrop .swal2-container .swal2-popup { + pointer-events: all; +} +body.swal2-no-backdrop .swal2-container .swal2-modal { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +@media print { + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow-y: scroll !important; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] { + display: none; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { + position: static !important; + } +} +body.swal2-toast-shown .swal2-container { + box-sizing: border-box; + width: 360px; + max-width: 100%; + background-color: transparent; + pointer-events: none; +} +body.swal2-toast-shown .swal2-container.swal2-top { + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right { + top: 0; + right: 0; + bottom: auto; + left: auto; +} +body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left { + top: 0; + right: auto; + bottom: auto; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-center { + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left { + top: auto; + right: auto; + bottom: 0; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-bottom { + top: auto; + right: auto; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right { + top: auto; + right: 0; + bottom: 0; + left: auto; +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.js new file mode 100644 index 0000000000..e9c254f064 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.js @@ -0,0 +1,3121 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                      \n \n
                        \n
                        \n \n

                        \n
                        \n \n \n
                        \n \n \n
                        \n \n
                        \n \n \n
                        \n
                        \n
                        \n \n \n \n
                        \n
                        \n
                        \n
                        \n
                        \n
                        \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                        \n \n
                        \n
                        \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                        ").concat(content, "
                        "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                        in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                        '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.css new file mode 100644 index 0000000000..25eb26f1c0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.css @@ -0,0 +1 @@ +.swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.js new file mode 100644 index 0000000000..9a383d5289 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                        \n \n
                          \n
                          \n \n

                          \n
                          \n \n \n
                          \n \n \n
                          \n \n
                          \n \n \n
                          \n
                          \n
                          \n \n \n \n
                          \n
                          \n
                          \n
                          \n
                          \n
                          \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                          \n \n
                          \n
                          \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                          ').concat(e,"
                          "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                          ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj index 8b103d8f94..3e4b6c5293 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj +++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj @@ -24,18 +24,23 @@ + + + + + diff --git a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs index 8f9cdc7e0d..1602f55267 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs +++ b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs @@ -32,6 +32,7 @@ using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; using Volo.Abp.Account; +using Volo.Abp.PermissionManagement.HttpApi; using Volo.Abp.Validation.Localization; using Volo.Docs.Documents.FullSearch.Elastic; @@ -41,15 +42,20 @@ namespace VoloDocs.Web typeof(DocsWebModule), typeof(DocsAdminWebModule), typeof(DocsApplicationModule), + typeof(DocsHttpApiModule), typeof(DocsAdminApplicationModule), + typeof(DocsAdminHttpApiModule), typeof(VoloDocsEntityFrameworkCoreModule), typeof(AbpAutofacModule), typeof(AbpAccountWebModule), typeof(AbpAccountApplicationModule), + typeof(AbpAccountHttpApiModule), typeof(AbpIdentityWebModule), typeof(AbpIdentityApplicationModule), + typeof(AbpIdentityHttpApiModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpPermissionManagementApplicationModule), + typeof(AbpPermissionManagementHttpApiModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule) )] public class VoloDocsWebModule : AbpModule @@ -113,7 +119,7 @@ namespace VoloDocs.Web options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); }); - + Configure(options => { options.FileSets.AddEmbedded("VoloDocs.Web"); @@ -170,7 +176,7 @@ namespace VoloDocs.Web }); app.UseStatusCodePagesWithReExecute("/error/{0}"); - + //app.UseMiddleware(); app.UseConfiguredEndpoints(); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.js new file mode 100644 index 0000000000..8cbddafe42 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.js @@ -0,0 +1,3123 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                          \n \n
                            \n
                            \n \n

                            \n
                            \n \n \n
                            \n \n \n
                            \n \n
                            \n \n \n
                            \n
                            \n
                            \n \n \n \n
                            \n
                            \n
                            \n
                            \n
                            \n
                            \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                            \n \n
                            \n
                            \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                            ").concat(content, "
                            "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                            in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                            '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} + +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.min.js new file mode 100644 index 0000000000..57ff7ff176 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.all.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                            \n \n
                              \n
                              \n \n

                              \n
                              \n \n \n
                              \n \n \n
                              \n \n
                              \n \n \n
                              \n
                              \n
                              \n \n \n \n
                              \n
                              \n
                              \n
                              \n
                              \n
                              \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                              \n \n
                              \n
                              \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                              ').concat(e,"
                              "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                              ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.css b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.css new file mode 100644 index 0000000000..1feb7a5581 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.css @@ -0,0 +1,1319 @@ +.swal2-popup.swal2-toast { + box-sizing: border-box; + grid-column: 1/4 !important; + grid-row: 1/4 !important; + grid-template-columns: 1fr 99fr 1fr; + padding: 1em; + overflow-y: hidden; + background: #fff; + box-shadow: 0 0 0.625em #d9d9d9; + pointer-events: all; +} +.swal2-popup.swal2-toast > * { + grid-column: 2; +} +.swal2-popup.swal2-toast .swal2-title { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-loading { + justify-content: center; +} +.swal2-popup.swal2-toast .swal2-input { + height: 2em; + margin: 0.5em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-validation-message { + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-footer { + margin: 0.5em 0 0; + padding: 0.5em 0 0; + font-size: 0.8em; +} +.swal2-popup.swal2-toast .swal2-close { + grid-column: 3/3; + grid-row: 1/99; + align-self: center; + width: 0.8em; + height: 0.8em; + margin: 0; + font-size: 2em; +} +.swal2-popup.swal2-toast .swal2-html-container { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-html-container:empty { + padding: 0; +} +.swal2-popup.swal2-toast .swal2-loader { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + height: 2em; + margin: 0.25em; +} +.swal2-popup.swal2-toast .swal2-icon { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + min-width: 2em; + height: 2em; + margin: 0 0.5em 0 0; +} +.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 1.8em; + font-weight: bold; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { + top: 0.875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-actions { + justify-content: flex-start; + height: auto; + margin: 0; + margin-top: 0.3125em; + padding: 0; +} +.swal2-popup.swal2-toast .swal2-styled { + margin: 0.25em 0.5em; + padding: 0.4em 0.6em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-styled:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-popup.swal2-toast .swal2-success { + border-color: #a5dc86; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 1.6em; + height: 3em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.8em; + left: -0.5em; + transform: rotate(-45deg); + transform-origin: 2em 2em; + border-radius: 4em 0 0 4em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.25em; + left: 0.9375em; + transform-origin: 0 1.5em; + border-radius: 0 4em 4em 0; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { + top: 0; + left: 0.4375em; + width: 0.4375em; + height: 2.6875em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { + height: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { + top: 1.125em; + left: 0.1875em; + width: 0.75em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-toast-animate-success-line-tip 0.75s; + animation: swal2-toast-animate-success-line-tip 0.75s; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-toast-animate-success-line-long 0.75s; + animation: swal2-toast-animate-success-line-long 0.75s; +} +.swal2-popup.swal2-toast.swal2-show { + -webkit-animation: swal2-toast-show 0.5s; + animation: swal2-toast-show 0.5s; +} +.swal2-popup.swal2-toast.swal2-hide { + -webkit-animation: swal2-toast-hide 0.1s forwards; + animation: swal2-toast-hide 0.1s forwards; +} + +.swal2-container { + display: grid; + position: fixed; + z-index: 1060; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; + grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; + grid-template-rows: minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto); + grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); + height: 100%; + padding: 0.625em; + overflow-x: hidden; + transition: background-color 0.1s; + -webkit-overflow-scrolling: touch; +} +.swal2-container.swal2-backdrop-show, .swal2-container.swal2-noanimation { + background: rgba(0, 0, 0, 0.4); +} +.swal2-container.swal2-backdrop-hide { + background: transparent !important; +} +.swal2-container.swal2-top-start, .swal2-container.swal2-center-start, .swal2-container.swal2-bottom-start { + grid-template-columns: minmax(0, 1fr) auto auto; +} +.swal2-container.swal2-top, .swal2-container.swal2-center, .swal2-container.swal2-bottom { + grid-template-columns: auto minmax(0, 1fr) auto; +} +.swal2-container.swal2-top-end, .swal2-container.swal2-center-end, .swal2-container.swal2-bottom-end { + grid-template-columns: auto auto minmax(0, 1fr); +} +.swal2-container.swal2-top-start > .swal2-popup { + align-self: start; +} +.swal2-container.swal2-top > .swal2-popup { + grid-column: 2; + align-self: start; + justify-self: center; +} +.swal2-container.swal2-top-end > .swal2-popup, .swal2-container.swal2-top-right > .swal2-popup { + grid-column: 3; + align-self: start; + justify-self: end; +} +.swal2-container.swal2-center-start > .swal2-popup, .swal2-container.swal2-center-left > .swal2-popup { + grid-row: 2; + align-self: center; +} +.swal2-container.swal2-center > .swal2-popup { + grid-column: 2; + grid-row: 2; + align-self: center; + justify-self: center; +} +.swal2-container.swal2-center-end > .swal2-popup, .swal2-container.swal2-center-right > .swal2-popup { + grid-column: 3; + grid-row: 2; + align-self: center; + justify-self: end; +} +.swal2-container.swal2-bottom-start > .swal2-popup, .swal2-container.swal2-bottom-left > .swal2-popup { + grid-column: 1; + grid-row: 3; + align-self: end; +} +.swal2-container.swal2-bottom > .swal2-popup { + grid-column: 2; + grid-row: 3; + justify-self: center; + align-self: end; +} +.swal2-container.swal2-bottom-end > .swal2-popup, .swal2-container.swal2-bottom-right > .swal2-popup { + grid-column: 3; + grid-row: 3; + align-self: end; + justify-self: end; +} +.swal2-container.swal2-grow-row > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-column: 1/4; + width: 100%; +} +.swal2-container.swal2-grow-column > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-row: 1/4; + align-self: stretch; +} +.swal2-container.swal2-no-transition { + transition: none !important; +} + +.swal2-popup { + display: none; + position: relative; + box-sizing: border-box; + grid-template-columns: minmax(0, 100%); + width: 32em; + max-width: 100%; + padding: 0 0 1.25em; + border: none; + border-radius: 5px; + background: #fff; + color: #545454; + font-family: inherit; + font-size: 1rem; +} +.swal2-popup:focus { + outline: none; +} +.swal2-popup.swal2-loading { + overflow-y: hidden; +} + +.swal2-title { + position: relative; + max-width: 100%; + margin: 0; + padding: 0.8em 1em 0; + color: #595959; + font-size: 1.875em; + font-weight: 600; + text-align: center; + text-transform: none; + word-wrap: break-word; +} + +.swal2-actions { + display: flex; + z-index: 1; + box-sizing: border-box; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: auto; + margin: 1.25em auto 0; + padding: 0; +} +.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { + opacity: 0.4; +} +.swal2-actions:not(.swal2-loading) .swal2-styled:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); +} +.swal2-actions:not(.swal2-loading) .swal2-styled:active { + background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); +} + +.swal2-loader { + display: none; + align-items: center; + justify-content: center; + width: 2.2em; + height: 2.2em; + margin: 0 1.875em; + -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + border-width: 0.25em; + border-style: solid; + border-radius: 100%; + border-color: #2778c4 transparent #2778c4 transparent; +} + +.swal2-styled { + margin: 0.3125em; + padding: 0.625em 1.1em; + transition: box-shadow 0.1s; + box-shadow: 0 0 0 3px transparent; + font-weight: 500; +} +.swal2-styled:not([disabled]) { + cursor: pointer; +} +.swal2-styled.swal2-confirm { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #7367f0; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-confirm:focus { + box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.5); +} +.swal2-styled.swal2-deny { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #ea5455; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-deny:focus { + box-shadow: 0 0 0 3px rgba(234, 84, 85, 0.5); +} +.swal2-styled.swal2-cancel { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #6e7d88; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-cancel:focus { + box-shadow: 0 0 0 3px rgba(110, 125, 136, 0.5); +} +.swal2-styled.swal2-default-outline:focus { + box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-styled:focus { + outline: none; +} +.swal2-styled::-moz-focus-inner { + border: 0; +} + +.swal2-footer { + justify-content: center; + margin: 1em 0 0; + padding: 1em 1em 0; + border-top: 1px solid #eee; + color: #545454; + font-size: 1em; +} + +.swal2-timer-progress-bar-container { + position: absolute; + right: 0; + bottom: 0; + left: 0; + grid-column: auto !important; + height: 0.25em; + overflow: hidden; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +.swal2-timer-progress-bar { + width: 100%; + height: 0.25em; + background: rgba(0, 0, 0, 0.2); +} + +.swal2-image { + max-width: 100%; + margin: 2em auto 1em; +} + +.swal2-close { + z-index: 2; + align-items: center; + justify-content: center; + width: 1.2em; + height: 1.2em; + margin-top: 0; + margin-right: 0; + margin-bottom: -1.2em; + padding: 0; + overflow: hidden; + transition: color 0.1s, box-shadow 0.1s; + border: none; + border-radius: 5px; + background: transparent; + color: #ccc; + font-family: serif; + font-family: monospace; + font-size: 2.5em; + cursor: pointer; + justify-self: end; +} +.swal2-close:hover { + transform: none; + background: transparent; + color: #f27474; +} +.swal2-close:focus { + outline: none; + box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-close::-moz-focus-inner { + border: 0; +} + +.swal2-html-container { + z-index: 1; + justify-content: center; + margin: 1em 1.6em 0.3em; + padding: 0; + overflow: auto; + color: #545454; + font-size: 1.125em; + font-weight: normal; + line-height: normal; + text-align: center; + word-wrap: break-word; + word-break: break-word; +} + +.swal2-input, +.swal2-file, +.swal2-textarea, +.swal2-select, +.swal2-radio, +.swal2-checkbox { + margin: 1em 2em 0; +} + +.swal2-input, +.swal2-file, +.swal2-textarea { + box-sizing: border-box; + width: auto; + transition: border-color 0.1s, box-shadow 0.1s; + border: 1px solid #d9d9d9; + border-radius: 0.1875em; + background: inherit; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; + color: inherit; + font-size: 1.125em; +} +.swal2-input.swal2-inputerror, +.swal2-file.swal2-inputerror, +.swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; +} +.swal2-input:focus, +.swal2-file:focus, +.swal2-textarea:focus { + border: 1px solid #b4dbed; + outline: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder { + color: #ccc; +} +.swal2-input:-ms-input-placeholder, .swal2-file:-ms-input-placeholder, .swal2-textarea:-ms-input-placeholder { + color: #ccc; +} +.swal2-input::placeholder, +.swal2-file::placeholder, +.swal2-textarea::placeholder { + color: #ccc; +} + +.swal2-range { + margin: 1em 2em 0; + background: #fff; +} +.swal2-range input { + width: 80%; +} +.swal2-range output { + width: 20%; + color: inherit; + font-weight: 600; + text-align: center; +} +.swal2-range input, +.swal2-range output { + height: 2.625em; + padding: 0; + font-size: 1.125em; + line-height: 2.625em; +} + +.swal2-input { + height: 2.625em; + padding: 0 0.75em; +} + +.swal2-file { + width: 75%; + margin-right: auto; + margin-left: auto; + background: inherit; + font-size: 1.125em; +} + +.swal2-textarea { + height: 6.75em; + padding: 0.75em; +} + +.swal2-select { + min-width: 50%; + max-width: 100%; + padding: 0.375em 0.625em; + background: inherit; + color: inherit; + font-size: 1.125em; +} + +.swal2-radio, +.swal2-checkbox { + align-items: center; + justify-content: center; + background: #fff; + color: inherit; +} +.swal2-radio label, +.swal2-checkbox label { + margin: 0 0.6em; + font-size: 1.125em; +} +.swal2-radio input, +.swal2-checkbox input { + flex-shrink: 0; + margin: 0 0.4em; +} + +.swal2-input-label { + display: flex; + justify-content: center; + margin: 1em auto 0; +} + +.swal2-validation-message { + align-items: center; + justify-content: center; + margin: 1em 0 0; + padding: 0.625em; + overflow: hidden; + background: #f0f0f0; + color: #666666; + font-size: 1em; + font-weight: 300; +} +.swal2-validation-message::before { + content: "!"; + display: inline-block; + width: 1.5em; + min-width: 1.5em; + height: 1.5em; + margin: 0 0.625em; + border-radius: 50%; + background-color: #f27474; + color: #fff; + font-weight: 600; + line-height: 1.5em; + text-align: center; +} + +.swal2-icon { + position: relative; + box-sizing: content-box; + justify-content: center; + width: 5em; + height: 5em; + margin: 2.5em auto 0.6em; + border: 0.25em solid transparent; + border-radius: 50%; + border-color: #000; + font-family: inherit; + line-height: 5em; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 3.75em; +} +.swal2-icon.swal2-error { + border-color: #f27474; + color: #f27474; +} +.swal2-icon.swal2-error .swal2-x-mark { + position: relative; + flex-grow: 1; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line] { + display: block; + position: absolute; + top: 2.3125em; + width: 2.9375em; + height: 0.3125em; + border-radius: 0.125em; + background-color: #f27474; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 1.0625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 1em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-error.swal2-icon-show { + -webkit-animation: swal2-animate-error-icon 0.5s; + animation: swal2-animate-error-icon 0.5s; +} +.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { + -webkit-animation: swal2-animate-error-x-mark 0.5s; + animation: swal2-animate-error-x-mark 0.5s; +} +.swal2-icon.swal2-warning { + border-color: #facea8; + color: #f8bb86; +} +.swal2-icon.swal2-info { + border-color: #9de0f6; + color: #3fc3ee; +} +.swal2-icon.swal2-question { + border-color: #c9dae1; + color: #87adbd; +} +.swal2-icon.swal2-success { + border-color: #a5dc86; + color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 3.75em; + height: 7.5em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.4375em; + left: -2.0635em; + transform: rotate(-45deg); + transform-origin: 3.75em 3.75em; + border-radius: 7.5em 0 0 7.5em; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.6875em; + left: 1.875em; + transform: rotate(-45deg); + transform-origin: 0 3.75em; + border-radius: 0 7.5em 7.5em 0; +} +.swal2-icon.swal2-success .swal2-success-ring { + position: absolute; + z-index: 2; + top: -0.25em; + left: -0.25em; + box-sizing: content-box; + width: 100%; + height: 100%; + border: 0.25em solid rgba(165, 220, 134, 0.3); + border-radius: 50%; +} +.swal2-icon.swal2-success .swal2-success-fix { + position: absolute; + z-index: 1; + top: 0.5em; + left: 1.625em; + width: 0.4375em; + height: 5.625em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line] { + display: block; + position: absolute; + z-index: 2; + height: 0.3125em; + border-radius: 0.125em; + background-color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.875em; + left: 0.8125em; + width: 1.5625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-animate-success-line-tip 0.75s; + animation: swal2-animate-success-line-tip 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-animate-success-line-long 0.75s; + animation: swal2-animate-success-line-long 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { + -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in; + animation: swal2-rotate-success-circular-line 4.25s ease-in; +} + +.swal2-progress-steps { + flex-wrap: wrap; + align-items: center; + max-width: 100%; + margin: 1.25em auto; + padding: 0; + background: inherit; + font-weight: 600; +} +.swal2-progress-steps li { + display: inline-block; + position: relative; +} +.swal2-progress-steps .swal2-progress-step { + z-index: 20; + flex-shrink: 0; + width: 2em; + height: 2em; + border-radius: 2em; + background: #2778c4; + color: #fff; + line-height: 2em; + text-align: center; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { + background: #2778c4; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step { + background: #add8e6; + color: #fff; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: #add8e6; +} +.swal2-progress-steps .swal2-progress-step-line { + z-index: 10; + flex-shrink: 0; + width: 2.5em; + height: 0.4em; + margin: 0 -1px; + background: #2778c4; +} + +[class^=swal2] { + -webkit-tap-highlight-color: transparent; +} + +.swal2-show { + -webkit-animation: swal2-show 0.3s; + animation: swal2-show 0.3s; +} + +.swal2-hide { + -webkit-animation: swal2-hide 0.15s forwards; + animation: swal2-hide 0.15s forwards; +} + +.swal2-noanimation { + transition: none; +} + +.swal2-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.swal2-rtl .swal2-close { + margin-right: initial; + margin-left: 0; +} +.swal2-rtl .swal2-timer-progress-bar { + right: 0; + left: auto; +} + +@-webkit-keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} + +@keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} +@-webkit-keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@-webkit-keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@-webkit-keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@-webkit-keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@-webkit-keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@-webkit-keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@-webkit-keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow: hidden; +} +body.swal2-height-auto { + height: auto !important; +} +body.swal2-no-backdrop .swal2-container { + background-color: transparent !important; + pointer-events: none; +} +body.swal2-no-backdrop .swal2-container .swal2-popup { + pointer-events: all; +} +body.swal2-no-backdrop .swal2-container .swal2-modal { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +@media print { + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow-y: scroll !important; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] { + display: none; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { + position: static !important; + } +} +body.swal2-toast-shown .swal2-container { + box-sizing: border-box; + width: 360px; + max-width: 100%; + background-color: transparent; + pointer-events: none; +} +body.swal2-toast-shown .swal2-container.swal2-top { + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right { + top: 0; + right: 0; + bottom: auto; + left: auto; +} +body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left { + top: 0; + right: auto; + bottom: auto; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-center { + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left { + top: auto; + right: auto; + bottom: 0; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-bottom { + top: auto; + right: auto; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right { + top: auto; + right: 0; + bottom: 0; + left: auto; +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.js new file mode 100644 index 0000000000..e9c254f064 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.js @@ -0,0 +1,3121 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                              \n \n
                                \n
                                \n \n

                                \n
                                \n \n \n
                                \n \n \n
                                \n \n
                                \n \n \n
                                \n
                                \n
                                \n \n \n \n
                                \n
                                \n
                                \n
                                \n
                                \n
                                \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                                \n \n
                                \n
                                \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                                ").concat(content, "
                                "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                                in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                                '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.css b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.css new file mode 100644 index 0000000000..25eb26f1c0 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.css @@ -0,0 +1 @@ +.swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.js new file mode 100644 index 0000000000..9a383d5289 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/sweetalert2/sweetalert2.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                                \n \n
                                  \n
                                  \n \n

                                  \n
                                  \n \n \n
                                  \n \n \n
                                  \n \n
                                  \n \n \n
                                  \n
                                  \n
                                  \n \n \n \n
                                  \n
                                  \n
                                  \n
                                  \n
                                  \n
                                  \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                                  \n \n
                                  \n
                                  \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                                  ').concat(e,"
                                  "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                                  ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs index 82c1013f4a..38d5996eea 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs @@ -21,6 +21,7 @@ using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.HttpApi; using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.Web; @@ -32,15 +33,19 @@ namespace Volo.Abp.SettingManagement.DemoApp [DependsOn( typeof(AbpSettingManagementWebModule), typeof(AbpSettingManagementApplicationModule), + typeof(AbpSettingManagementHttpApiModule), typeof(AbpAutofacModule), typeof(AbpAccountWebModule), typeof(AbpAccountApplicationModule), + typeof(AbpAccountHttpApiModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementApplicationModule), + typeof(AbpPermissionManagementHttpApiModule), typeof(AbpIdentityWebModule), typeof(AbpIdentityApplicationModule), + typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule) diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj index 7703e724bf..f0d42ae673 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj @@ -17,19 +17,23 @@ + + + + diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js new file mode 100644 index 0000000000..8cbddafe42 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js @@ -0,0 +1,3123 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                                  \n \n
                                    \n
                                    \n \n

                                    \n
                                    \n \n \n
                                    \n \n \n
                                    \n \n
                                    \n \n \n
                                    \n
                                    \n
                                    \n \n \n \n
                                    \n
                                    \n
                                    \n
                                    \n
                                    \n
                                    \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                                    \n \n
                                    \n
                                    \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                                    ").concat(content, "
                                    "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                                    in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                                    '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} + +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js new file mode 100644 index 0000000000..57ff7ff176 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                                    \n \n
                                      \n
                                      \n \n

                                      \n
                                      \n \n \n
                                      \n \n \n
                                      \n \n
                                      \n \n \n
                                      \n
                                      \n
                                      \n \n \n \n
                                      \n
                                      \n
                                      \n
                                      \n
                                      \n
                                      \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                                      \n \n
                                      \n
                                      \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                                      ').concat(e,"
                                      "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                                      ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css new file mode 100644 index 0000000000..1feb7a5581 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css @@ -0,0 +1,1319 @@ +.swal2-popup.swal2-toast { + box-sizing: border-box; + grid-column: 1/4 !important; + grid-row: 1/4 !important; + grid-template-columns: 1fr 99fr 1fr; + padding: 1em; + overflow-y: hidden; + background: #fff; + box-shadow: 0 0 0.625em #d9d9d9; + pointer-events: all; +} +.swal2-popup.swal2-toast > * { + grid-column: 2; +} +.swal2-popup.swal2-toast .swal2-title { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-loading { + justify-content: center; +} +.swal2-popup.swal2-toast .swal2-input { + height: 2em; + margin: 0.5em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-validation-message { + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-footer { + margin: 0.5em 0 0; + padding: 0.5em 0 0; + font-size: 0.8em; +} +.swal2-popup.swal2-toast .swal2-close { + grid-column: 3/3; + grid-row: 1/99; + align-self: center; + width: 0.8em; + height: 0.8em; + margin: 0; + font-size: 2em; +} +.swal2-popup.swal2-toast .swal2-html-container { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-html-container:empty { + padding: 0; +} +.swal2-popup.swal2-toast .swal2-loader { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + height: 2em; + margin: 0.25em; +} +.swal2-popup.swal2-toast .swal2-icon { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + min-width: 2em; + height: 2em; + margin: 0 0.5em 0 0; +} +.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 1.8em; + font-weight: bold; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { + top: 0.875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-actions { + justify-content: flex-start; + height: auto; + margin: 0; + margin-top: 0.3125em; + padding: 0; +} +.swal2-popup.swal2-toast .swal2-styled { + margin: 0.25em 0.5em; + padding: 0.4em 0.6em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-styled:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-popup.swal2-toast .swal2-success { + border-color: #a5dc86; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 1.6em; + height: 3em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.8em; + left: -0.5em; + transform: rotate(-45deg); + transform-origin: 2em 2em; + border-radius: 4em 0 0 4em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.25em; + left: 0.9375em; + transform-origin: 0 1.5em; + border-radius: 0 4em 4em 0; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { + top: 0; + left: 0.4375em; + width: 0.4375em; + height: 2.6875em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { + height: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { + top: 1.125em; + left: 0.1875em; + width: 0.75em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-toast-animate-success-line-tip 0.75s; + animation: swal2-toast-animate-success-line-tip 0.75s; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-toast-animate-success-line-long 0.75s; + animation: swal2-toast-animate-success-line-long 0.75s; +} +.swal2-popup.swal2-toast.swal2-show { + -webkit-animation: swal2-toast-show 0.5s; + animation: swal2-toast-show 0.5s; +} +.swal2-popup.swal2-toast.swal2-hide { + -webkit-animation: swal2-toast-hide 0.1s forwards; + animation: swal2-toast-hide 0.1s forwards; +} + +.swal2-container { + display: grid; + position: fixed; + z-index: 1060; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; + grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; + grid-template-rows: minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto); + grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); + height: 100%; + padding: 0.625em; + overflow-x: hidden; + transition: background-color 0.1s; + -webkit-overflow-scrolling: touch; +} +.swal2-container.swal2-backdrop-show, .swal2-container.swal2-noanimation { + background: rgba(0, 0, 0, 0.4); +} +.swal2-container.swal2-backdrop-hide { + background: transparent !important; +} +.swal2-container.swal2-top-start, .swal2-container.swal2-center-start, .swal2-container.swal2-bottom-start { + grid-template-columns: minmax(0, 1fr) auto auto; +} +.swal2-container.swal2-top, .swal2-container.swal2-center, .swal2-container.swal2-bottom { + grid-template-columns: auto minmax(0, 1fr) auto; +} +.swal2-container.swal2-top-end, .swal2-container.swal2-center-end, .swal2-container.swal2-bottom-end { + grid-template-columns: auto auto minmax(0, 1fr); +} +.swal2-container.swal2-top-start > .swal2-popup { + align-self: start; +} +.swal2-container.swal2-top > .swal2-popup { + grid-column: 2; + align-self: start; + justify-self: center; +} +.swal2-container.swal2-top-end > .swal2-popup, .swal2-container.swal2-top-right > .swal2-popup { + grid-column: 3; + align-self: start; + justify-self: end; +} +.swal2-container.swal2-center-start > .swal2-popup, .swal2-container.swal2-center-left > .swal2-popup { + grid-row: 2; + align-self: center; +} +.swal2-container.swal2-center > .swal2-popup { + grid-column: 2; + grid-row: 2; + align-self: center; + justify-self: center; +} +.swal2-container.swal2-center-end > .swal2-popup, .swal2-container.swal2-center-right > .swal2-popup { + grid-column: 3; + grid-row: 2; + align-self: center; + justify-self: end; +} +.swal2-container.swal2-bottom-start > .swal2-popup, .swal2-container.swal2-bottom-left > .swal2-popup { + grid-column: 1; + grid-row: 3; + align-self: end; +} +.swal2-container.swal2-bottom > .swal2-popup { + grid-column: 2; + grid-row: 3; + justify-self: center; + align-self: end; +} +.swal2-container.swal2-bottom-end > .swal2-popup, .swal2-container.swal2-bottom-right > .swal2-popup { + grid-column: 3; + grid-row: 3; + align-self: end; + justify-self: end; +} +.swal2-container.swal2-grow-row > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-column: 1/4; + width: 100%; +} +.swal2-container.swal2-grow-column > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-row: 1/4; + align-self: stretch; +} +.swal2-container.swal2-no-transition { + transition: none !important; +} + +.swal2-popup { + display: none; + position: relative; + box-sizing: border-box; + grid-template-columns: minmax(0, 100%); + width: 32em; + max-width: 100%; + padding: 0 0 1.25em; + border: none; + border-radius: 5px; + background: #fff; + color: #545454; + font-family: inherit; + font-size: 1rem; +} +.swal2-popup:focus { + outline: none; +} +.swal2-popup.swal2-loading { + overflow-y: hidden; +} + +.swal2-title { + position: relative; + max-width: 100%; + margin: 0; + padding: 0.8em 1em 0; + color: #595959; + font-size: 1.875em; + font-weight: 600; + text-align: center; + text-transform: none; + word-wrap: break-word; +} + +.swal2-actions { + display: flex; + z-index: 1; + box-sizing: border-box; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: auto; + margin: 1.25em auto 0; + padding: 0; +} +.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { + opacity: 0.4; +} +.swal2-actions:not(.swal2-loading) .swal2-styled:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); +} +.swal2-actions:not(.swal2-loading) .swal2-styled:active { + background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); +} + +.swal2-loader { + display: none; + align-items: center; + justify-content: center; + width: 2.2em; + height: 2.2em; + margin: 0 1.875em; + -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + border-width: 0.25em; + border-style: solid; + border-radius: 100%; + border-color: #2778c4 transparent #2778c4 transparent; +} + +.swal2-styled { + margin: 0.3125em; + padding: 0.625em 1.1em; + transition: box-shadow 0.1s; + box-shadow: 0 0 0 3px transparent; + font-weight: 500; +} +.swal2-styled:not([disabled]) { + cursor: pointer; +} +.swal2-styled.swal2-confirm { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #7367f0; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-confirm:focus { + box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.5); +} +.swal2-styled.swal2-deny { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #ea5455; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-deny:focus { + box-shadow: 0 0 0 3px rgba(234, 84, 85, 0.5); +} +.swal2-styled.swal2-cancel { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #6e7d88; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-cancel:focus { + box-shadow: 0 0 0 3px rgba(110, 125, 136, 0.5); +} +.swal2-styled.swal2-default-outline:focus { + box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-styled:focus { + outline: none; +} +.swal2-styled::-moz-focus-inner { + border: 0; +} + +.swal2-footer { + justify-content: center; + margin: 1em 0 0; + padding: 1em 1em 0; + border-top: 1px solid #eee; + color: #545454; + font-size: 1em; +} + +.swal2-timer-progress-bar-container { + position: absolute; + right: 0; + bottom: 0; + left: 0; + grid-column: auto !important; + height: 0.25em; + overflow: hidden; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +.swal2-timer-progress-bar { + width: 100%; + height: 0.25em; + background: rgba(0, 0, 0, 0.2); +} + +.swal2-image { + max-width: 100%; + margin: 2em auto 1em; +} + +.swal2-close { + z-index: 2; + align-items: center; + justify-content: center; + width: 1.2em; + height: 1.2em; + margin-top: 0; + margin-right: 0; + margin-bottom: -1.2em; + padding: 0; + overflow: hidden; + transition: color 0.1s, box-shadow 0.1s; + border: none; + border-radius: 5px; + background: transparent; + color: #ccc; + font-family: serif; + font-family: monospace; + font-size: 2.5em; + cursor: pointer; + justify-self: end; +} +.swal2-close:hover { + transform: none; + background: transparent; + color: #f27474; +} +.swal2-close:focus { + outline: none; + box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-close::-moz-focus-inner { + border: 0; +} + +.swal2-html-container { + z-index: 1; + justify-content: center; + margin: 1em 1.6em 0.3em; + padding: 0; + overflow: auto; + color: #545454; + font-size: 1.125em; + font-weight: normal; + line-height: normal; + text-align: center; + word-wrap: break-word; + word-break: break-word; +} + +.swal2-input, +.swal2-file, +.swal2-textarea, +.swal2-select, +.swal2-radio, +.swal2-checkbox { + margin: 1em 2em 0; +} + +.swal2-input, +.swal2-file, +.swal2-textarea { + box-sizing: border-box; + width: auto; + transition: border-color 0.1s, box-shadow 0.1s; + border: 1px solid #d9d9d9; + border-radius: 0.1875em; + background: inherit; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; + color: inherit; + font-size: 1.125em; +} +.swal2-input.swal2-inputerror, +.swal2-file.swal2-inputerror, +.swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; +} +.swal2-input:focus, +.swal2-file:focus, +.swal2-textarea:focus { + border: 1px solid #b4dbed; + outline: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder { + color: #ccc; +} +.swal2-input:-ms-input-placeholder, .swal2-file:-ms-input-placeholder, .swal2-textarea:-ms-input-placeholder { + color: #ccc; +} +.swal2-input::placeholder, +.swal2-file::placeholder, +.swal2-textarea::placeholder { + color: #ccc; +} + +.swal2-range { + margin: 1em 2em 0; + background: #fff; +} +.swal2-range input { + width: 80%; +} +.swal2-range output { + width: 20%; + color: inherit; + font-weight: 600; + text-align: center; +} +.swal2-range input, +.swal2-range output { + height: 2.625em; + padding: 0; + font-size: 1.125em; + line-height: 2.625em; +} + +.swal2-input { + height: 2.625em; + padding: 0 0.75em; +} + +.swal2-file { + width: 75%; + margin-right: auto; + margin-left: auto; + background: inherit; + font-size: 1.125em; +} + +.swal2-textarea { + height: 6.75em; + padding: 0.75em; +} + +.swal2-select { + min-width: 50%; + max-width: 100%; + padding: 0.375em 0.625em; + background: inherit; + color: inherit; + font-size: 1.125em; +} + +.swal2-radio, +.swal2-checkbox { + align-items: center; + justify-content: center; + background: #fff; + color: inherit; +} +.swal2-radio label, +.swal2-checkbox label { + margin: 0 0.6em; + font-size: 1.125em; +} +.swal2-radio input, +.swal2-checkbox input { + flex-shrink: 0; + margin: 0 0.4em; +} + +.swal2-input-label { + display: flex; + justify-content: center; + margin: 1em auto 0; +} + +.swal2-validation-message { + align-items: center; + justify-content: center; + margin: 1em 0 0; + padding: 0.625em; + overflow: hidden; + background: #f0f0f0; + color: #666666; + font-size: 1em; + font-weight: 300; +} +.swal2-validation-message::before { + content: "!"; + display: inline-block; + width: 1.5em; + min-width: 1.5em; + height: 1.5em; + margin: 0 0.625em; + border-radius: 50%; + background-color: #f27474; + color: #fff; + font-weight: 600; + line-height: 1.5em; + text-align: center; +} + +.swal2-icon { + position: relative; + box-sizing: content-box; + justify-content: center; + width: 5em; + height: 5em; + margin: 2.5em auto 0.6em; + border: 0.25em solid transparent; + border-radius: 50%; + border-color: #000; + font-family: inherit; + line-height: 5em; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 3.75em; +} +.swal2-icon.swal2-error { + border-color: #f27474; + color: #f27474; +} +.swal2-icon.swal2-error .swal2-x-mark { + position: relative; + flex-grow: 1; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line] { + display: block; + position: absolute; + top: 2.3125em; + width: 2.9375em; + height: 0.3125em; + border-radius: 0.125em; + background-color: #f27474; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 1.0625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 1em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-error.swal2-icon-show { + -webkit-animation: swal2-animate-error-icon 0.5s; + animation: swal2-animate-error-icon 0.5s; +} +.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { + -webkit-animation: swal2-animate-error-x-mark 0.5s; + animation: swal2-animate-error-x-mark 0.5s; +} +.swal2-icon.swal2-warning { + border-color: #facea8; + color: #f8bb86; +} +.swal2-icon.swal2-info { + border-color: #9de0f6; + color: #3fc3ee; +} +.swal2-icon.swal2-question { + border-color: #c9dae1; + color: #87adbd; +} +.swal2-icon.swal2-success { + border-color: #a5dc86; + color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 3.75em; + height: 7.5em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.4375em; + left: -2.0635em; + transform: rotate(-45deg); + transform-origin: 3.75em 3.75em; + border-radius: 7.5em 0 0 7.5em; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.6875em; + left: 1.875em; + transform: rotate(-45deg); + transform-origin: 0 3.75em; + border-radius: 0 7.5em 7.5em 0; +} +.swal2-icon.swal2-success .swal2-success-ring { + position: absolute; + z-index: 2; + top: -0.25em; + left: -0.25em; + box-sizing: content-box; + width: 100%; + height: 100%; + border: 0.25em solid rgba(165, 220, 134, 0.3); + border-radius: 50%; +} +.swal2-icon.swal2-success .swal2-success-fix { + position: absolute; + z-index: 1; + top: 0.5em; + left: 1.625em; + width: 0.4375em; + height: 5.625em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line] { + display: block; + position: absolute; + z-index: 2; + height: 0.3125em; + border-radius: 0.125em; + background-color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.875em; + left: 0.8125em; + width: 1.5625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-animate-success-line-tip 0.75s; + animation: swal2-animate-success-line-tip 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-animate-success-line-long 0.75s; + animation: swal2-animate-success-line-long 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { + -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in; + animation: swal2-rotate-success-circular-line 4.25s ease-in; +} + +.swal2-progress-steps { + flex-wrap: wrap; + align-items: center; + max-width: 100%; + margin: 1.25em auto; + padding: 0; + background: inherit; + font-weight: 600; +} +.swal2-progress-steps li { + display: inline-block; + position: relative; +} +.swal2-progress-steps .swal2-progress-step { + z-index: 20; + flex-shrink: 0; + width: 2em; + height: 2em; + border-radius: 2em; + background: #2778c4; + color: #fff; + line-height: 2em; + text-align: center; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { + background: #2778c4; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step { + background: #add8e6; + color: #fff; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: #add8e6; +} +.swal2-progress-steps .swal2-progress-step-line { + z-index: 10; + flex-shrink: 0; + width: 2.5em; + height: 0.4em; + margin: 0 -1px; + background: #2778c4; +} + +[class^=swal2] { + -webkit-tap-highlight-color: transparent; +} + +.swal2-show { + -webkit-animation: swal2-show 0.3s; + animation: swal2-show 0.3s; +} + +.swal2-hide { + -webkit-animation: swal2-hide 0.15s forwards; + animation: swal2-hide 0.15s forwards; +} + +.swal2-noanimation { + transition: none; +} + +.swal2-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.swal2-rtl .swal2-close { + margin-right: initial; + margin-left: 0; +} +.swal2-rtl .swal2-timer-progress-bar { + right: 0; + left: auto; +} + +@-webkit-keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} + +@keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} +@-webkit-keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@-webkit-keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@-webkit-keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@-webkit-keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@-webkit-keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@-webkit-keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@-webkit-keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow: hidden; +} +body.swal2-height-auto { + height: auto !important; +} +body.swal2-no-backdrop .swal2-container { + background-color: transparent !important; + pointer-events: none; +} +body.swal2-no-backdrop .swal2-container .swal2-popup { + pointer-events: all; +} +body.swal2-no-backdrop .swal2-container .swal2-modal { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +@media print { + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow-y: scroll !important; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] { + display: none; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { + position: static !important; + } +} +body.swal2-toast-shown .swal2-container { + box-sizing: border-box; + width: 360px; + max-width: 100%; + background-color: transparent; + pointer-events: none; +} +body.swal2-toast-shown .swal2-container.swal2-top { + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right { + top: 0; + right: 0; + bottom: auto; + left: auto; +} +body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left { + top: 0; + right: auto; + bottom: auto; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-center { + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left { + top: auto; + right: auto; + bottom: 0; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-bottom { + top: auto; + right: auto; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right { + top: auto; + right: 0; + bottom: 0; + left: auto; +} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js new file mode 100644 index 0000000000..e9c254f064 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js @@ -0,0 +1,3121 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                                      \n \n
                                        \n
                                        \n \n

                                        \n
                                        \n \n \n
                                        \n \n \n
                                        \n \n
                                        \n \n \n
                                        \n
                                        \n
                                        \n \n \n \n
                                        \n
                                        \n
                                        \n
                                        \n
                                        \n
                                        \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                                        \n \n
                                        \n
                                        \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                                        ").concat(content, "
                                        "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                                        in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                                        '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css new file mode 100644 index 0000000000..25eb26f1c0 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css @@ -0,0 +1 @@ +.swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js new file mode 100644 index 0000000000..9a383d5289 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                                        \n \n
                                          \n
                                          \n \n

                                          \n
                                          \n \n \n
                                          \n \n \n
                                          \n \n
                                          \n \n \n
                                          \n
                                          \n
                                          \n \n \n \n
                                          \n
                                          \n
                                          \n
                                          \n
                                          \n
                                          \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                                          \n \n
                                          \n
                                          \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                                          ').concat(e,"
                                          "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                                          ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js new file mode 100644 index 0000000000..8cbddafe42 --- /dev/null +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.js @@ -0,0 +1,3123 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                                          \n \n
                                            \n
                                            \n \n

                                            \n
                                            \n \n \n
                                            \n \n \n
                                            \n \n
                                            \n \n \n
                                            \n
                                            \n
                                            \n \n \n \n
                                            \n
                                            \n
                                            \n
                                            \n
                                            \n
                                            \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                                            \n \n
                                            \n
                                            \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                                            ").concat(content, "
                                            "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                                            in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                                            '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} + +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js new file mode 100644 index 0000000000..57ff7ff176 --- /dev/null +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.all.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                                            \n \n
                                              \n
                                              \n \n

                                              \n
                                              \n \n \n
                                              \n \n \n
                                              \n \n
                                              \n \n \n
                                              \n
                                              \n
                                              \n \n \n \n
                                              \n
                                              \n
                                              \n
                                              \n
                                              \n
                                              \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                                              \n \n
                                              \n
                                              \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                                              ').concat(e,"
                                              "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                                              ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css new file mode 100644 index 0000000000..1feb7a5581 --- /dev/null +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.css @@ -0,0 +1,1319 @@ +.swal2-popup.swal2-toast { + box-sizing: border-box; + grid-column: 1/4 !important; + grid-row: 1/4 !important; + grid-template-columns: 1fr 99fr 1fr; + padding: 1em; + overflow-y: hidden; + background: #fff; + box-shadow: 0 0 0.625em #d9d9d9; + pointer-events: all; +} +.swal2-popup.swal2-toast > * { + grid-column: 2; +} +.swal2-popup.swal2-toast .swal2-title { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-loading { + justify-content: center; +} +.swal2-popup.swal2-toast .swal2-input { + height: 2em; + margin: 0.5em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-validation-message { + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-footer { + margin: 0.5em 0 0; + padding: 0.5em 0 0; + font-size: 0.8em; +} +.swal2-popup.swal2-toast .swal2-close { + grid-column: 3/3; + grid-row: 1/99; + align-self: center; + width: 0.8em; + height: 0.8em; + margin: 0; + font-size: 2em; +} +.swal2-popup.swal2-toast .swal2-html-container { + margin: 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} +.swal2-popup.swal2-toast .swal2-html-container:empty { + padding: 0; +} +.swal2-popup.swal2-toast .swal2-loader { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + height: 2em; + margin: 0.25em; +} +.swal2-popup.swal2-toast .swal2-icon { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + min-width: 2em; + height: 2em; + margin: 0 0.5em 0 0; +} +.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 1.8em; + font-weight: bold; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { + top: 0.875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-actions { + justify-content: flex-start; + height: auto; + margin: 0; + margin-top: 0.3125em; + padding: 0; +} +.swal2-popup.swal2-toast .swal2-styled { + margin: 0.25em 0.5em; + padding: 0.4em 0.6em; + font-size: 1em; +} +.swal2-popup.swal2-toast .swal2-styled:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-popup.swal2-toast .swal2-success { + border-color: #a5dc86; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 1.6em; + height: 3em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.8em; + left: -0.5em; + transform: rotate(-45deg); + transform-origin: 2em 2em; + border-radius: 4em 0 0 4em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.25em; + left: 0.9375em; + transform-origin: 0 1.5em; + border-radius: 0 4em 4em 0; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} +.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { + top: 0; + left: 0.4375em; + width: 0.4375em; + height: 2.6875em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { + height: 0.3125em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { + top: 1.125em; + left: 0.1875em; + width: 0.75em; +} +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-toast-animate-success-line-tip 0.75s; + animation: swal2-toast-animate-success-line-tip 0.75s; +} +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-toast-animate-success-line-long 0.75s; + animation: swal2-toast-animate-success-line-long 0.75s; +} +.swal2-popup.swal2-toast.swal2-show { + -webkit-animation: swal2-toast-show 0.5s; + animation: swal2-toast-show 0.5s; +} +.swal2-popup.swal2-toast.swal2-hide { + -webkit-animation: swal2-toast-hide 0.1s forwards; + animation: swal2-toast-hide 0.1s forwards; +} + +.swal2-container { + display: grid; + position: fixed; + z-index: 1060; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; + grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; + grid-template-rows: minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto); + grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); + height: 100%; + padding: 0.625em; + overflow-x: hidden; + transition: background-color 0.1s; + -webkit-overflow-scrolling: touch; +} +.swal2-container.swal2-backdrop-show, .swal2-container.swal2-noanimation { + background: rgba(0, 0, 0, 0.4); +} +.swal2-container.swal2-backdrop-hide { + background: transparent !important; +} +.swal2-container.swal2-top-start, .swal2-container.swal2-center-start, .swal2-container.swal2-bottom-start { + grid-template-columns: minmax(0, 1fr) auto auto; +} +.swal2-container.swal2-top, .swal2-container.swal2-center, .swal2-container.swal2-bottom { + grid-template-columns: auto minmax(0, 1fr) auto; +} +.swal2-container.swal2-top-end, .swal2-container.swal2-center-end, .swal2-container.swal2-bottom-end { + grid-template-columns: auto auto minmax(0, 1fr); +} +.swal2-container.swal2-top-start > .swal2-popup { + align-self: start; +} +.swal2-container.swal2-top > .swal2-popup { + grid-column: 2; + align-self: start; + justify-self: center; +} +.swal2-container.swal2-top-end > .swal2-popup, .swal2-container.swal2-top-right > .swal2-popup { + grid-column: 3; + align-self: start; + justify-self: end; +} +.swal2-container.swal2-center-start > .swal2-popup, .swal2-container.swal2-center-left > .swal2-popup { + grid-row: 2; + align-self: center; +} +.swal2-container.swal2-center > .swal2-popup { + grid-column: 2; + grid-row: 2; + align-self: center; + justify-self: center; +} +.swal2-container.swal2-center-end > .swal2-popup, .swal2-container.swal2-center-right > .swal2-popup { + grid-column: 3; + grid-row: 2; + align-self: center; + justify-self: end; +} +.swal2-container.swal2-bottom-start > .swal2-popup, .swal2-container.swal2-bottom-left > .swal2-popup { + grid-column: 1; + grid-row: 3; + align-self: end; +} +.swal2-container.swal2-bottom > .swal2-popup { + grid-column: 2; + grid-row: 3; + justify-self: center; + align-self: end; +} +.swal2-container.swal2-bottom-end > .swal2-popup, .swal2-container.swal2-bottom-right > .swal2-popup { + grid-column: 3; + grid-row: 3; + align-self: end; + justify-self: end; +} +.swal2-container.swal2-grow-row > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-column: 1/4; + width: 100%; +} +.swal2-container.swal2-grow-column > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup { + grid-row: 1/4; + align-self: stretch; +} +.swal2-container.swal2-no-transition { + transition: none !important; +} + +.swal2-popup { + display: none; + position: relative; + box-sizing: border-box; + grid-template-columns: minmax(0, 100%); + width: 32em; + max-width: 100%; + padding: 0 0 1.25em; + border: none; + border-radius: 5px; + background: #fff; + color: #545454; + font-family: inherit; + font-size: 1rem; +} +.swal2-popup:focus { + outline: none; +} +.swal2-popup.swal2-loading { + overflow-y: hidden; +} + +.swal2-title { + position: relative; + max-width: 100%; + margin: 0; + padding: 0.8em 1em 0; + color: #595959; + font-size: 1.875em; + font-weight: 600; + text-align: center; + text-transform: none; + word-wrap: break-word; +} + +.swal2-actions { + display: flex; + z-index: 1; + box-sizing: border-box; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: auto; + margin: 1.25em auto 0; + padding: 0; +} +.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { + opacity: 0.4; +} +.swal2-actions:not(.swal2-loading) .swal2-styled:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); +} +.swal2-actions:not(.swal2-loading) .swal2-styled:active { + background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); +} + +.swal2-loader { + display: none; + align-items: center; + justify-content: center; + width: 2.2em; + height: 2.2em; + margin: 0 1.875em; + -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + border-width: 0.25em; + border-style: solid; + border-radius: 100%; + border-color: #2778c4 transparent #2778c4 transparent; +} + +.swal2-styled { + margin: 0.3125em; + padding: 0.625em 1.1em; + transition: box-shadow 0.1s; + box-shadow: 0 0 0 3px transparent; + font-weight: 500; +} +.swal2-styled:not([disabled]) { + cursor: pointer; +} +.swal2-styled.swal2-confirm { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #7367f0; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-confirm:focus { + box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.5); +} +.swal2-styled.swal2-deny { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #ea5455; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-deny:focus { + box-shadow: 0 0 0 3px rgba(234, 84, 85, 0.5); +} +.swal2-styled.swal2-cancel { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #6e7d88; + color: #fff; + font-size: 1em; +} +.swal2-styled.swal2-cancel:focus { + box-shadow: 0 0 0 3px rgba(110, 125, 136, 0.5); +} +.swal2-styled.swal2-default-outline:focus { + box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-styled:focus { + outline: none; +} +.swal2-styled::-moz-focus-inner { + border: 0; +} + +.swal2-footer { + justify-content: center; + margin: 1em 0 0; + padding: 1em 1em 0; + border-top: 1px solid #eee; + color: #545454; + font-size: 1em; +} + +.swal2-timer-progress-bar-container { + position: absolute; + right: 0; + bottom: 0; + left: 0; + grid-column: auto !important; + height: 0.25em; + overflow: hidden; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +.swal2-timer-progress-bar { + width: 100%; + height: 0.25em; + background: rgba(0, 0, 0, 0.2); +} + +.swal2-image { + max-width: 100%; + margin: 2em auto 1em; +} + +.swal2-close { + z-index: 2; + align-items: center; + justify-content: center; + width: 1.2em; + height: 1.2em; + margin-top: 0; + margin-right: 0; + margin-bottom: -1.2em; + padding: 0; + overflow: hidden; + transition: color 0.1s, box-shadow 0.1s; + border: none; + border-radius: 5px; + background: transparent; + color: #ccc; + font-family: serif; + font-family: monospace; + font-size: 2.5em; + cursor: pointer; + justify-self: end; +} +.swal2-close:hover { + transform: none; + background: transparent; + color: #f27474; +} +.swal2-close:focus { + outline: none; + box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-close::-moz-focus-inner { + border: 0; +} + +.swal2-html-container { + z-index: 1; + justify-content: center; + margin: 1em 1.6em 0.3em; + padding: 0; + overflow: auto; + color: #545454; + font-size: 1.125em; + font-weight: normal; + line-height: normal; + text-align: center; + word-wrap: break-word; + word-break: break-word; +} + +.swal2-input, +.swal2-file, +.swal2-textarea, +.swal2-select, +.swal2-radio, +.swal2-checkbox { + margin: 1em 2em 0; +} + +.swal2-input, +.swal2-file, +.swal2-textarea { + box-sizing: border-box; + width: auto; + transition: border-color 0.1s, box-shadow 0.1s; + border: 1px solid #d9d9d9; + border-radius: 0.1875em; + background: inherit; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; + color: inherit; + font-size: 1.125em; +} +.swal2-input.swal2-inputerror, +.swal2-file.swal2-inputerror, +.swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; +} +.swal2-input:focus, +.swal2-file:focus, +.swal2-textarea:focus { + border: 1px solid #b4dbed; + outline: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); +} +.swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder { + color: #ccc; +} +.swal2-input:-ms-input-placeholder, .swal2-file:-ms-input-placeholder, .swal2-textarea:-ms-input-placeholder { + color: #ccc; +} +.swal2-input::placeholder, +.swal2-file::placeholder, +.swal2-textarea::placeholder { + color: #ccc; +} + +.swal2-range { + margin: 1em 2em 0; + background: #fff; +} +.swal2-range input { + width: 80%; +} +.swal2-range output { + width: 20%; + color: inherit; + font-weight: 600; + text-align: center; +} +.swal2-range input, +.swal2-range output { + height: 2.625em; + padding: 0; + font-size: 1.125em; + line-height: 2.625em; +} + +.swal2-input { + height: 2.625em; + padding: 0 0.75em; +} + +.swal2-file { + width: 75%; + margin-right: auto; + margin-left: auto; + background: inherit; + font-size: 1.125em; +} + +.swal2-textarea { + height: 6.75em; + padding: 0.75em; +} + +.swal2-select { + min-width: 50%; + max-width: 100%; + padding: 0.375em 0.625em; + background: inherit; + color: inherit; + font-size: 1.125em; +} + +.swal2-radio, +.swal2-checkbox { + align-items: center; + justify-content: center; + background: #fff; + color: inherit; +} +.swal2-radio label, +.swal2-checkbox label { + margin: 0 0.6em; + font-size: 1.125em; +} +.swal2-radio input, +.swal2-checkbox input { + flex-shrink: 0; + margin: 0 0.4em; +} + +.swal2-input-label { + display: flex; + justify-content: center; + margin: 1em auto 0; +} + +.swal2-validation-message { + align-items: center; + justify-content: center; + margin: 1em 0 0; + padding: 0.625em; + overflow: hidden; + background: #f0f0f0; + color: #666666; + font-size: 1em; + font-weight: 300; +} +.swal2-validation-message::before { + content: "!"; + display: inline-block; + width: 1.5em; + min-width: 1.5em; + height: 1.5em; + margin: 0 0.625em; + border-radius: 50%; + background-color: #f27474; + color: #fff; + font-weight: 600; + line-height: 1.5em; + text-align: center; +} + +.swal2-icon { + position: relative; + box-sizing: content-box; + justify-content: center; + width: 5em; + height: 5em; + margin: 2.5em auto 0.6em; + border: 0.25em solid transparent; + border-radius: 50%; + border-color: #000; + font-family: inherit; + line-height: 5em; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 3.75em; +} +.swal2-icon.swal2-error { + border-color: #f27474; + color: #f27474; +} +.swal2-icon.swal2-error .swal2-x-mark { + position: relative; + flex-grow: 1; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line] { + display: block; + position: absolute; + top: 2.3125em; + width: 2.9375em; + height: 0.3125em; + border-radius: 0.125em; + background-color: #f27474; +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 1.0625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 1em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-error.swal2-icon-show { + -webkit-animation: swal2-animate-error-icon 0.5s; + animation: swal2-animate-error-icon 0.5s; +} +.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { + -webkit-animation: swal2-animate-error-x-mark 0.5s; + animation: swal2-animate-error-x-mark 0.5s; +} +.swal2-icon.swal2-warning { + border-color: #facea8; + color: #f8bb86; +} +.swal2-icon.swal2-info { + border-color: #9de0f6; + color: #3fc3ee; +} +.swal2-icon.swal2-question { + border-color: #c9dae1; + color: #87adbd; +} +.swal2-icon.swal2-success { + border-color: #a5dc86; + color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 3.75em; + height: 7.5em; + transform: rotate(45deg); + border-radius: 50%; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.4375em; + left: -2.0635em; + transform: rotate(-45deg); + transform-origin: 3.75em 3.75em; + border-radius: 7.5em 0 0 7.5em; +} +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.6875em; + left: 1.875em; + transform: rotate(-45deg); + transform-origin: 0 3.75em; + border-radius: 0 7.5em 7.5em 0; +} +.swal2-icon.swal2-success .swal2-success-ring { + position: absolute; + z-index: 2; + top: -0.25em; + left: -0.25em; + box-sizing: content-box; + width: 100%; + height: 100%; + border: 0.25em solid rgba(165, 220, 134, 0.3); + border-radius: 50%; +} +.swal2-icon.swal2-success .swal2-success-fix { + position: absolute; + z-index: 1; + top: 0.5em; + left: 1.625em; + width: 0.4375em; + height: 5.625em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line] { + display: block; + position: absolute; + z-index: 2; + height: 0.3125em; + border-radius: 0.125em; + background-color: #a5dc86; +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.875em; + left: 0.8125em; + width: 1.5625em; + transform: rotate(45deg); +} +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + transform: rotate(-45deg); +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { + -webkit-animation: swal2-animate-success-line-tip 0.75s; + animation: swal2-animate-success-line-tip 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { + -webkit-animation: swal2-animate-success-line-long 0.75s; + animation: swal2-animate-success-line-long 0.75s; +} +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { + -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in; + animation: swal2-rotate-success-circular-line 4.25s ease-in; +} + +.swal2-progress-steps { + flex-wrap: wrap; + align-items: center; + max-width: 100%; + margin: 1.25em auto; + padding: 0; + background: inherit; + font-weight: 600; +} +.swal2-progress-steps li { + display: inline-block; + position: relative; +} +.swal2-progress-steps .swal2-progress-step { + z-index: 20; + flex-shrink: 0; + width: 2em; + height: 2em; + border-radius: 2em; + background: #2778c4; + color: #fff; + line-height: 2em; + text-align: center; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { + background: #2778c4; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step { + background: #add8e6; + color: #fff; +} +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: #add8e6; +} +.swal2-progress-steps .swal2-progress-step-line { + z-index: 10; + flex-shrink: 0; + width: 2.5em; + height: 0.4em; + margin: 0 -1px; + background: #2778c4; +} + +[class^=swal2] { + -webkit-tap-highlight-color: transparent; +} + +.swal2-show { + -webkit-animation: swal2-show 0.3s; + animation: swal2-show 0.3s; +} + +.swal2-hide { + -webkit-animation: swal2-hide 0.15s forwards; + animation: swal2-hide 0.15s forwards; +} + +.swal2-noanimation { + transition: none; +} + +.swal2-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.swal2-rtl .swal2-close { + margin-right: initial; + margin-left: 0; +} +.swal2-rtl .swal2-timer-progress-bar { + right: 0; + left: auto; +} + +@-webkit-keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} + +@keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} +@-webkit-keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} +@-webkit-keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} +@-webkit-keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} +@-webkit-keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} +@-webkit-keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} +@-webkit-keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} +@-webkit-keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} +@-webkit-keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow: hidden; +} +body.swal2-height-auto { + height: auto !important; +} +body.swal2-no-backdrop .swal2-container { + background-color: transparent !important; + pointer-events: none; +} +body.swal2-no-backdrop .swal2-container .swal2-popup { + pointer-events: all; +} +body.swal2-no-backdrop .swal2-container .swal2-modal { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +@media print { + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow-y: scroll !important; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] { + display: none; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { + position: static !important; + } +} +body.swal2-toast-shown .swal2-container { + box-sizing: border-box; + width: 360px; + max-width: 100%; + background-color: transparent; + pointer-events: none; +} +body.swal2-toast-shown .swal2-container.swal2-top { + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right { + top: 0; + right: 0; + bottom: auto; + left: auto; +} +body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left { + top: 0; + right: auto; + bottom: auto; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-center { + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translateY(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left { + top: auto; + right: auto; + bottom: 0; + left: 0; +} +body.swal2-toast-shown .swal2-container.swal2-bottom { + top: auto; + right: auto; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} +body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right { + top: auto; + right: 0; + bottom: 0; + left: auto; +} \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js new file mode 100644 index 0000000000..e9c254f064 --- /dev/null +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.js @@ -0,0 +1,3121 @@ +/*! +* sweetalert2 v11.1.5 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param str + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * Convert NodeList to Array + * @param nodeList + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardise console warnings + * @param message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardise console errors + * @param message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + a = parseInt(a.getAttribute('tabindex')); + b = parseInt(b.getAttribute('tabindex')); + + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']); + }; + const isToast = () => { + return document.body.classList.contains(swalClasses['toast-shown']); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + const setInnerHtml = (elem, html) => { + // #1926 + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(popup, swalClasses[inputType]); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(popup, swalClasses.input); + } + }; + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (target.forEach) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + const getChildByClass = (elem, className) => { + for (let i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + return elem.childNodes[i]; + } + } + }; + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + const show = (elem, display = 'flex') => { + elem.style.display = display; + }; + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = (timer, reset = false) => { + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + // Detect Node env + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const sweetHTML = "\n
                                              \n \n
                                                \n
                                                \n \n

                                                \n
                                                \n \n \n
                                                \n \n \n
                                                \n \n
                                                \n \n \n
                                                \n
                                                \n
                                                \n \n \n \n
                                                \n
                                                \n
                                                \n
                                                \n
                                                \n
                                                \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + if (Swal.isVisible()) { + Swal.resetValidationMessage(); + } + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getChildByClass(popup, swalClasses.input); + const file = getChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); // Object + } else if (typeof param === 'object') { + handleObject(param, target); // Plain string + } else if (param) { + setInnerHtml(target, param); + } + }; + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); // For other objects use their string representation + } else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + OAnimation: 'oAnimationEnd oanimationend', + animation: 'animationend' + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } // Loader + + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = 1; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); + + setTimeout(() => { + // #2291 + if ('MutationObserver' in window) { + // #1699 + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); // Content as plain text + } else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); // No content + } else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgoundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgoundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, "\n
                                                \n \n
                                                \n
                                                \n "); + } else if (params.icon === 'error') { + setInnerHtml(icon, "\n \n \n \n \n "); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
                                                ").concat(content, "
                                                "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + + if (params.toast) { + // #2170 + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Background + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + function fire(...args) { + const Swal = this; + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + Swal.fire(); + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler(attr = 'data-swal-template') { + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + // TODO: replace with event.composedPath() + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {String} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {String} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {String} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); // #1948 + } + }; + + const addBottomPaddingForTallPopups = () => { + const safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i); + + if (safari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + + const lockBodyScroll = () => { + // #1246 + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylys(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + + const isStylys = event => { + // #1786 + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + + const isZoom = event => { + // #1891 + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + /** + * This module containts `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap() + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + const popup = getPopup(); + + if (!popup) { + return; + } + + resolveValue = prepareResolveValue(resolveValue); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return; + } + + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise + + swalPromiseResolve(resolveValue); + } + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date() - this.started; + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
                                                in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
                                                '); + } + + init(params); + } + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + let value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + value = false; + } + + if (typeof defaultParams[paramName] === 'object') { + value = JSON.parse(value); + } + + result[paramName] = value; + }); + return result; + }; + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + + const getSwalImage = templateContent => { + const result = {}; + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + + const getSwalIcon = templateContent => { + const result = {}; + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + + const getSwalInput = templateContent => { + const result = {}; + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + + const showWarningsForElements = template => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(template.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }); + } else { + succeedWith(instance, value); + } + }; + + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); // TAB + } else if (e.key === 'Tab') { + handleTab(e, innerParams); // ARROWS - switch focus between buttons + } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); // ESC + } else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // #720 #721 + if (e.isComposing) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(innerParams, btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + const buttonToFocus = document.activeElement[sibling]; + + if (buttonToFocus) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + function _main(userParams, mixinParams = {}) { + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise(resolve => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = {}; // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(param => { + if (Swal.isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + // Unset this.params so GC will dispose it (#1569) + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569) + + unsetWeakMaps(privateProps); + unsetWeakMaps(privateMethods); // Unset currentInstance + + delete globalState.currentInstance; + }; + + const unsetWeakMaps = obj => { + for (const i in obj) { + obj[i] = new WeakMap(); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + _main: _main, + update: update, + _destroy: _destroy + }); + + let currentInstance; + + class SweetAlert { + constructor(...args) { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function (...args) { + if (currentInstance) { + return currentInstance[key](...args); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.1.5'; + + const Swal = SweetAlert; + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css new file mode 100644 index 0000000000..25eb26f1c0 --- /dev/null +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.css @@ -0,0 +1 @@ +.swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9;pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7367f0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(115,103,240,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#ea5455;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(234,84,85,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7d88;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,125,136,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 0}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 0;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto} \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js new file mode 100644 index 0000000000..9a383d5289 --- /dev/null +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/sweetalert2/sweetalert2.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const l=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),a=e=>Array.prototype.slice.call(e),s=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),s(t))},c=e=>"function"==typeof e?e():e,u=e=>e&&"function"==typeof e.toPromise,d=e=>u(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),g=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),f=e=>{const t=b();return t?t.querySelector(e):null},y=e=>f(".".concat(e)),v=()=>y(h.popup),w=()=>y(h.icon),C=()=>y(h.title),k=()=>y(h["html-container"]),A=()=>y(h.image),B=()=>y(h["progress-steps"]),x=()=>y(h["validation-message"]),P=()=>f(".".concat(h.actions," .").concat(h.confirm)),E=()=>f(".".concat(h.actions," .").concat(h.deny));const S=()=>f(".".concat(h.loader)),T=()=>f(".".concat(h.actions," .").concat(h.cancel)),L=()=>y(h.actions),O=()=>y(h.footer),j=()=>y(h["timer-progress-bar"]),D=()=>y(h.close),I=()=>{const e=a(v().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;eG(e))},M=()=>!H()&&!document.body.classList.contains(h["no-backdrop"]),H=()=>document.body.classList.contains(h["toast-shown"]);const q={previousBodyPadding:null},V=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");a(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),a(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},N=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e{var o,i;if(o=e,i=t,a(o.classList).forEach(e=>{Object.values(h).includes(e)||Object.values(g).includes(e)||Object.values(i.showClass).includes(e)||o.classList.remove(e)}),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return s("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));W(e,t.customClass[n])}},F=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return K(e,h[t]);case"checkbox":return e.querySelector(".".concat(h.checkbox," input"));case"radio":return e.querySelector(".".concat(h.radio," input:checked"))||e.querySelector(".".concat(h.radio," input:first-child"));case"range":return e.querySelector(".".concat(h.range," input"));default:return K(e,h.input)}},R=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},z=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{e.forEach?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},W=(e,t)=>{z(e,t,!0)},_=(e,t)=>{z(e,t,!1)},K=(t,n)=>{for(let e=0;e{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},Z=(e,t="flex")=>{e.style.display=t},J=e=>{e.style.display="none"},X=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},$=(e,t,n)=>{t?Z(e,n):J(e)},G=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),Q=()=>!G(P())&&!G(E())&&!G(T()),ee=e=>!!(e.scrollHeight>e.clientHeight),te=e=>{const t=window.getComputedStyle(e);var n=parseFloat(t.getPropertyValue("animation-duration")||"0"),e=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0{const n=j();G(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))},oe=()=>"undefined"==typeof window||"undefined"==typeof document,ie='\n
                                                \n \n
                                                  \n
                                                  \n \n

                                                  \n
                                                  \n \n \n
                                                  \n \n \n
                                                  \n \n
                                                  \n \n \n
                                                  \n
                                                  \n
                                                  \n \n \n \n
                                                  \n
                                                  \n
                                                  \n
                                                  \n
                                                  \n
                                                  \n').replace(/(^|\n)\s*/g,""),ae=()=>{ln.isVisible()&&ln.resetValidationMessage()},se=e=>{var t=(()=>{const e=b();return!!e&&(e.remove(),_([document.documentElement,document.body],[h["no-backdrop"],h["toast-shown"],h["has-column"]]),!0)})();if(oe())r("SweetAlert2 requires document to initialize");else{const n=document.createElement("div");n.className=h.container,t&&W(n,h["no-transition"]),V(n,ie);const o="string"==typeof(t=e.target)?document.querySelector(t):t;o.appendChild(n),(e=>{const t=v();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")})(e),e=o,"rtl"===window.getComputedStyle(e).direction&&W(b(),h.rtl),(()=>{const e=v(),t=K(e,h.input),n=K(e,h.file),o=e.querySelector(".".concat(h.range," input")),i=e.querySelector(".".concat(h.range," output")),a=K(e,h.select),s=e.querySelector(".".concat(h.checkbox," input")),r=K(e,h.textarea);t.oninput=ae,n.onchange=ae,a.onchange=ae,s.onchange=ae,r.oninput=ae,o.oninput=()=>{ae(),i.value=o.value},o.onchange=()=>{ae(),o.nextSibling.value=o.value}})()}},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?ce(e,t):e&&V(t,e)},ce=(e,t)=>{e.jquery?le(t,e):V(t,e.toString())},le=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},ue=(()=>{if(oe())return!1;var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n];return!1})(),de=(e,t)=>{const n=L();var o=S(),i=P(),a=E(),s=T();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Z:J)(n),U(n,t,"actions"),pe(i,"confirm",t),pe(a,"deny",t),pe(s,"cancel",t),function(e,t,n,o){if(!o.buttonsStyling)return _([e,t,n],h.styled);W([e,t,n],h.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,W(e,h["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,W(t,h["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,W(n,h["default-outline"]))}(i,a,s,t),t.reverseButtons&&(n.insertBefore(s,o),n.insertBefore(a,o),n.insertBefore(i,o)),V(o,t.loaderHtml),U(o,t,"loader")};function pe(e,t,n){$(e,n["show".concat(o(t),"Button")],"inline-block"),V(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=h[t],U(e,n,"".concat(t,"Button")),W(e,n["".concat(t,"ButtonClass")])}const me=(e,t)=>{var n,o,i=b();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||W([document.documentElement,document.body],h["no-backdrop"]),o=i,(n=t.position)in h?W(o,h[n]):(s('The "position" parameter is not valid, defaulting to "center"'),W(o,h.center)),n=i,!(o=t.grow)||"string"!=typeof o||(o="grow-".concat(o))in h&&W(n,h[o]),U(i,t,"container"))};var he={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],be=e=>{if(!ke[e.input])return r('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));var t=Ce(e.input);const n=ke[e.input](t,e);Z(n),setTimeout(()=>{R(n)})},fe=(e,t)=>{const n=F(v(),e);if(n){(t=>{for(let e=0;e{var t=Ce(e.input);e.customClass&&W(t,e.customClass.input)},ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){e.id=h.input;const i=document.createElement("label");var o=h["input-label"];i.setAttribute("for",e.id),i.className=o,W(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Ce=e=>{e=h[e]||h.input;return K(v(),e)},ke={};ke.text=ke.email=ke.password=ke.number=ke.tel=ke.url=(e,t)=>("string"==typeof t.inputValue||"number"==typeof t.inputValue?e.value=t.inputValue:p(t.inputValue)||s('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue,'"')),we(e,e,t),ve(e,t),e.type=t.input,e),ke.file=(e,t)=>(we(e,e,t),ve(e,t),e),ke.range=(e,t)=>{const n=e.querySelector("input"),o=e.querySelector("output");return n.value=t.inputValue,n.type=t.input,o.value=t.inputValue,we(n,e,t),e},ke.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");V(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return we(e,e,t),e},ke.radio=e=>(e.textContent="",e),ke.checkbox=(e,t)=>{const n=F(v(),"checkbox");n.value=1,n.id=h.checkbox,n.checked=Boolean(t.inputValue);var o=e.querySelector("span");return V(o,t.inputPlaceholder),e},ke.textarea=(n,e)=>{n.value=e.inputValue,ve(n,e),we(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(v()).width);new MutationObserver(()=>{var e,e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?v().style.width="".concat(e,"px"):v().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const Ae=(e,t)=>{const n=k();U(n,t,"htmlContainer"),t.html?(re(t.html,n),Z(n,"block")):t.text?(n.textContent=t.text,Z(n,"block")):J(n),((e,o)=>{const i=v();e=he.innerParams.get(e);const a=!e||o.input!==e.input;ge.forEach(e=>{var t=h[e];const n=K(i,t);fe(e,o.inputAttributes),n.className=t,a&&J(n)}),o.input&&(a&&be(o),ye(o))})(e,t)},Be=(e,t)=>{for(const n in g)t.icon!==n&&_(e,g[n]);W(e,g[t.icon]),Ee(e,t),xe(),U(e,t,"icon")},xe=()=>{const e=v();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e{var n;e.textContent="",t.iconHtml?V(e,Se(t.iconHtml)):"success"===t.icon?V(e,'\n
                                                  \n \n
                                                  \n
                                                  \n '):"error"===t.icon?V(e,'\n \n \n \n \n '):(n={question:"?",warning:"!",info:"i"},V(e,Se(n[t.icon])))},Ee=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])X(e,n,"backgroundColor",t.iconColor);X(e,".swal2-success-ring","borderColor",t.iconColor)}},Se=e=>'
                                                  ').concat(e,"
                                                  "),Te=(e,o)=>{const i=B();if(!o.progressSteps||0===o.progressSteps.length)return J(i);Z(i),i.textContent="",o.currentProgressStep>=o.progressSteps.length&&s("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.progressSteps.forEach((e,t)=>{var n,e=(n=e,e=document.createElement("li"),W(e,h["progress-step"]),V(e,n),e);i.appendChild(e),t===o.currentProgressStep&&W(e,h["active-progress-step"]),t!==o.progressSteps.length-1&&(t=(e=>{const t=document.createElement("li");return W(t,h["progress-step-line"]),e.progressStepsDistance&&(t.style.width=e.progressStepsDistance),t})(o),i.appendChild(t))})},Le=(e,t)=>{e.className="".concat(h.popup," ").concat(G(e)?t.showClass.popup:""),t.toast?(W([document.documentElement,document.body],h["toast-shown"]),W(e,h.toast)):W(e,h.modal),U(e,t,"popup"),"string"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,h["icon-".concat(t.icon)])},Oe=(e,t)=>{var n,o,i;(e=>{var t=b();const n=v();e.toast?(Y(t,"width",e.width),n.style.width="100%",n.insertBefore(S(),w())):Y(n,"width",e.width),Y(n,"padding",e.padding),e.background&&(n.style.background=e.background),J(x()),Le(n,e)})(t),me(0,t),Te(0,t),i=e,n=t,o=he.innerParams.get(i),i=w(),o&&n.icon===o.icon?(Pe(i,n),Be(i,n)):n.icon||n.iconHtml?n.icon&&-1===Object.keys(g).indexOf(n.icon)?(r('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(n.icon,'"')),J(i)):(Z(i),Pe(i,n),Be(i,n),W(i,n.showClass.icon)):J(i),(e=>{const t=A();if(!e.imageUrl)return J(t);Z(t,""),t.setAttribute("src",e.imageUrl),t.setAttribute("alt",e.imageAlt),Y(t,"width",e.imageWidth),Y(t,"height",e.imageHeight),t.className=h.image,U(t,e,"image")})(t),(e=>{const t=C();$(t,e.title||e.titleText,"block"),e.title&&re(e.title,t),e.titleText&&(t.innerText=e.titleText),U(t,e,"title")})(t),(e=>{const t=D();V(t,e.closeButtonHtml),U(t,e,"closeButton"),$(t,e.showCloseButton),t.setAttribute("aria-label",e.closeButtonAriaLabel)})(t),Ae(e,t),de(0,t),i=t,e=O(),$(e,i.footer),i.footer&&re(i.footer,e),U(e,i,"footer"),"function"==typeof t.didRender&&t.didRender(v())};const je=()=>P()&&P().click();const De=e=>{let t=v();t||ln.fire(),t=v();var n=S();H()?J(w()):Ie(t,e),Z(n),t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()},Ie=(e,t)=>{var n=L();const o=S();!t&&G(P())&&(t=P()),Z(n),t&&(J(t),o.setAttribute("data-button-to-replace",t.className)),o.parentNode.insertBefore(o,t),W([e,n],h.loading)},Me={},He=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;Me.restoreFocusTimeout=setTimeout(()=>{Me.previousActiveElement&&Me.previousActiveElement.focus?(Me.previousActiveElement.focus(),Me.previousActiveElement=null):document.body&&document.body.focus(),e()},100),window.scrollTo(t,n)});const qe=()=>{if(Me.timeout)return(()=>{const e=j();var t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";var n=parseInt(window.getComputedStyle(e).width),n=parseInt(t/n*100);e.style.removeProperty("transition"),e.style.width="".concat(n,"%")})(),Me.timeout.stop()},Ve=()=>{if(Me.timeout){var e=Me.timeout.start();return ne(e),e}};let Ne=!1;const Ue={};const Fe=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in Ue){var n=e.getAttribute(o);if(n)return void Ue[o].fire({template:n})}},Re={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},ze=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],We={},_e=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Ke=e=>Object.prototype.hasOwnProperty.call(Re,e);const Ye=e=>We[e],Ze=e=>{!e.backdrop&&e.allowOutsideClick&&s('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const o in e)n=o,Ke(n)||s('Unknown parameter "'.concat(n,'"')),e.toast&&(t=o,_e.includes(t)&&s('The parameter "'.concat(t,'" is incompatible with toasts'))),t=o,Ye(t)&&i(t,Ye(t));var t,n};var Je=Object.freeze({isValidParameter:Ke,isUpdatableParameter:e=>-1!==ze.indexOf(e),isDeprecatedParameter:Ye,argsToParams:n=>{const o={};return"object"!=typeof n[0]||m(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||m(t)?o[e]=t:void 0!==t&&r("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>G(v()),clickConfirm:je,clickDeny:()=>E()&&E().click(),clickCancel:()=>T()&&T().click(),getContainer:b,getPopup:v,getTitle:C,getHtmlContainer:k,getImage:A,getIcon:w,getInputLabel:()=>y(h["input-label"]),getCloseButton:D,getActions:L,getConfirmButton:P,getDenyButton:E,getCancelButton:T,getLoader:S,getFooter:O,getTimerProgressBar:j,getFocusableElements:I,getValidationMessage:x,isLoading:()=>v().hasAttribute("data-loading"),fire:function(...e){return new this(...e)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:De,enableLoading:De,getTimerLeft:()=>Me.timeout&&Me.timeout.getTimerLeft(),stopTimer:qe,resumeTimer:Ve,toggleTimer:()=>{var e=Me.timeout;return e&&(e.running?qe:Ve)()},increaseTimer:e=>{if(Me.timeout){e=Me.timeout.increase(e);return ne(e,!0),e}},isTimerRunning:()=>Me.timeout&&Me.timeout.isRunning(),bindClickHandler:function(e="data-swal-template"){Ue[e]=this,Ne||(document.body.addEventListener("click",Fe),Ne=!0)}});function Xe(){var e=he.innerParams.get(this);if(e){const t=he.domCache.get(this);J(t.loader),H()?e.icon&&Z(w()):(e=>{const t=e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));if(t.length)Z(t[0],"inline-block");else if(Q())J(e.actions)})(t),_([t.popup,t.actions],h.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}}const $e=()=>{null===q.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(q.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(q.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=h["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},Ge=()=>{navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||v().scrollHeight>window.innerHeight-44&&(b().style.paddingBottom="".concat(44,"px"))},Qe=()=>{const e=b();let t;e.ontouchstart=e=>{t=et(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},et=e=>{var t=e.target,n=b();return!tt(e)&&!nt(e)&&(t===n||!(ee(n)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||ee(k())&&k().contains(t)))},tt=e=>e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType,nt=e=>e.touches&&1{const e=a(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})};var it={swalPromiseResolve:new WeakMap};function at(e,t,n,o){H()?ct(e,o):(He(n).then(()=>ct(e,o)),Me.keydownTarget.removeEventListener("keydown",Me.keydownHandler,{capture:Me.keydownListenerCapture}),Me.keydownHandlerAdded=!1),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),M()&&(null!==q.previousBodyPadding&&(document.body.style.paddingRight="".concat(q.previousBodyPadding,"px"),q.previousBodyPadding=null),N(document.body,h.iosfix)&&(t=parseInt(document.body.style.top,10),_(document.body,h.iosfix),document.body.style.top="",document.body.scrollTop=-1*t),ot()),_([document.documentElement,document.body],[h.shown,h["height-auto"],h["no-backdrop"],h["toast-shown"]])}function st(e){var t=v();if(t){e=void 0!==(o=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},o):{isConfirmed:!1,isDenied:!1,isDismissed:!0};var n=he.innerParams.get(this);if(n&&!N(t,n.hideClass.popup)){const i=it.swalPromiseResolve.get(this);_(t,n.showClass.popup),W(t,n.hideClass.popup);var o=b();_(o,n.showClass.backdrop),W(o,n.hideClass.backdrop),((e,t,n)=>{const o=b(),i=ue&&te(t);if(typeof n.willClose==="function")n.willClose(t);if(i)rt(e,t,o,n.returnFocus,n.didClose);else at(e,o,n.returnFocus,n.didClose)})(this,t,n),i(e)}}}const rt=(e,t,n,o,i)=>{Me.swalCloseEventFinishedCallback=at.bind(null,e,n,o,i),t.addEventListener(ue,function(e){e.target===t&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback)})},ct=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function lt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function ut(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function mt(e){var t,n;(t=e).inputValidator||Object.keys(pt).forEach(e=>{t.input===e&&(t.inputValidator=pt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&s("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(s('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("
                                                  ")),se(e)}const ht=["swal-title","swal-html","swal-footer"],gt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return kt(e),Object.assign(bt(e),ft(e),yt(e),vt(e),wt(e),Ct(e,ht))},bt=e=>{const o={};return a(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);var t=e.getAttribute("name");let n=e.getAttribute("value");"boolean"==typeof Re[t]&&"false"===n&&(n=!1),"object"==typeof Re[t]&&(n=JSON.parse(n)),o[t]=n}),o},ft=e=>{const n={};return a(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(o(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},yt=e=>{const t={},n=e.querySelector("swal-image");return n&&(At(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},vt=e=>{const t={},n=e.querySelector("swal-icon");return n&&(At(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},wt=e=>{const n={},t=e.querySelector("swal-input");t&&(At(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value")));e=e.querySelectorAll("swal-input-option");return e.length&&(n.inputOptions={},a(e).forEach(e=>{At(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},Ct=(e,t)=>{const n={};for(const o in t){const i=t[o],a=e.querySelector(i);a&&(At(a,[]),n[i.replace(/^swal-/,"")]=a.innerHTML.trim())}return n},kt=e=>{const t=ht.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);a(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&s("Unrecognized element <".concat(e,">"))})},At=(t,n)=>{a(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&s(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Bt=e=>{const t=b(),n=v();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;St(t,n,e),setTimeout(()=>{Pt(t,n)},10),M()&&(Et(t,e.scrollbarPadding,o),(()=>{const e=a(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),H()||Me.previousActiveElement||(Me.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),_(t,h["no-transition"])},xt=e=>{const t=v();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Pt=(e,t)=>{ue&&te(t)?(e.style.overflowY="hidden",t.addEventListener(ue,xt)):e.style.overflowY="auto"},Et=(e,t,n)=>{var o;(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1{e.scrollTop=0})},St=(e,t,n)=>{W(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),Z(t,"grid"),setTimeout(()=>{W(t,n.showClass.popup),t.style.removeProperty("opacity")},10),W([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast&&W([document.documentElement,document.body],h["height-auto"])},Tt=e=>e.checked?1:0,Lt=e=>e.checked?e.value:null,Ot=e=>e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,jt=(t,n)=>{const o=v(),i=e=>It[n.input](o,Mt(e),n);u(n.inputOptions)||p(n.inputOptions)?(De(P()),d(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Dt=(t,n)=>{const o=t.getInput();J(o),d(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),Z(o),o.focus(),t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e)),o.value="",Z(o),o.focus(),t.hideLoading()})},It={select:(e,t,i)=>{const a=K(e,h.select),s=(e,t,n)=>{const o=document.createElement("option");o.value=n,V(o,t),o.selected=Ht(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,a.appendChild(o),n.forEach(e=>s(o,e[1],e[0]))}else s(a,n,t)}),a.focus()},radio:(e,t,a)=>{const s=K(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Ht(t,a.inputValue)&&(n.checked=!0);const i=document.createElement("span");V(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),s.appendChild(o)});const n=s.querySelectorAll("input");n.length&&n[0].focus()}},Mt=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Mt(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Mt(t)),o.push([e,t])}),o},Ht=(e,t)=>t&&t.toString()===e.toString(),qt=(e,t)=>{var n=he.innerParams.get(e),o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Tt(n);case"radio":return Lt(n);case"file":return Ot(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?Vt(e,o,t):e.getInput().checkValidity()?("deny"===t?Nt:Ft)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Vt=(t,n,o)=>{const e=he.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>d(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?Nt:Ft)(t,n)})},Nt=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&De(E()),e.preDeny){const o=Promise.resolve().then(()=>d(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})})}else t.closePopup({isDenied:!0,value:n})},Ut=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Ft=(t,n)=>{const e=he.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&De(),e.preConfirm){t.resetValidationMessage();const o=Promise.resolve().then(()=>d(e.preConfirm(n,e.validationMessage)));o.then(e=>{G(x())||!1===e?t.hideLoading():Ut(t,void 0===e?n:e)})}else Ut(t,n)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();v().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{var o=he.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Kt(e,t,o):"Tab"===t.key?Yt(t,o):[...zt,...Wt].includes(t.key)?Zt(t.key):"Escape"===t.key&&Jt(t,o,n))},Kt=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(je(),t.preventDefault()))},Yt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e{const t=P(),n=E(),o=T();if([t,n,o].includes(document.activeElement)){e=zt.includes(e)?"nextElementSibling":"previousElementSibling";const i=document.activeElement[e];i&&i.focus()}},Jt=(e,t,n)=>{c(t.allowEscapeKey)&&(e.preventDefault(),n(l.esc))},Xt=(t,e,n)=>{e.popup.onclick=()=>{var e=he.innerParams.get(t);e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||e.timer||e.input||n(l.close)}};let $t=!1;const Gt=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&($t=!0)}}},Qt=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||($t=!0)}}},en=(n,o,i)=>{o.container.onclick=e=>{var t=he.innerParams.get(n);$t?$t=!1:e.target===o.container&&c(t.allowOutsideClick)&&i(l.backdrop)}};const tn=(e,t,n)=>{var o=j();J(o),t.timer&&(e.timeout=new dt(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(Z(o),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},nn=(e,t)=>{if(!t.toast)return c(t.allowEnterKey)?void(on(e,t)||Rt(0,-1,1)):an()},on=(e,t)=>t.focusDeny&&G(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&G(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!G(e.confirmButton))&&(e.confirmButton.focus(),!0),an=()=>{document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};const sn=e=>{for(const t in e)e[t]=new WeakMap};e=Object.freeze({hideLoading:Xe,disableLoading:Xe,getInput:function(e){var t=he.innerParams.get(e||this);return(e=he.domCache.get(e||this))?F(e.popup,t.input):null},close:st,closePopup:st,closeModal:st,closeToast:st,enableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){lt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return ut(this.getInput(),!1)},disableInput:function(){return ut(this.getInput(),!0)},showValidationMessage:function(e){const t=he.domCache.get(this);var n=he.innerParams.get(this);V(t.validationMessage,e),t.validationMessage.className=h["validation-message"],n.customClass&&n.customClass.validationMessage&&W(t.validationMessage,n.customClass.validationMessage),Z(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",h["validation-message"]),R(o),W(o,h.inputerror))},resetValidationMessage:function(){var e=he.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),_(t,h.inputerror))},getProgressSteps:function(){return he.domCache.get(this).progressSteps},_main:function(e,t={}){Ze(Object.assign({},t,e)),Me.currentInstance&&(Me.currentInstance._destroy(),M()&&ot()),Me.currentInstance=this,mt(e=((e,t)=>{const n=gt(e),o=Object.assign({},Re,t,n,e);return o.showClass=Object.assign({},Re.showClass,o.showClass),o.hideClass=Object.assign({},Re.hideClass,o.hideClass),o})(e,t)),Object.freeze(e),Me.timeout&&(Me.timeout.stop(),delete Me.timeout),clearTimeout(Me.restoreFocusTimeout);var s,r,c,t=(e=>{const t={popup:v(),container:b(),actions:L(),confirmButton:P(),denyButton:E(),cancelButton:T(),loader:S(),closeButton:D(),validationMessage:x(),progressSteps:B()};return he.domCache.set(e,t),t})(this);return Oe(this,e),he.innerParams.set(this,e),s=this,r=t,c=e,new Promise(e=>{const t=e=>{s.closePopup({isDismissed:!0,dismiss:e})};var n,o,i,a;it.swalPromiseResolve.set(s,e),r.confirmButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.input?qt(e,"confirm"):Ft(e,!0)})(s),r.denyButton.onclick=()=>(e=>{var t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?qt(e,"deny"):Nt(e,!1)})(s),r.cancelButton.onclick=()=>((e,t)=>{e.disableButtons(),t(l.cancel)})(s,t),r.closeButton.onclick=()=>t(l.close),n=s,a=r,e=t,he.innerParams.get(n).toast?Xt(n,a,e):(Gt(a),Qt(a),en(n,a,e)),o=s,a=Me,e=c,i=t,a.keydownTarget&&a.keydownHandlerAdded&&(a.keydownTarget.removeEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!1),e.toast||(a.keydownHandler=e=>_t(o,e,i),a.keydownTarget=e.keydownListenerCapture?window:v(),a.keydownListenerCapture=e.keydownListenerCapture,a.keydownTarget.addEventListener("keydown",a.keydownHandler,{capture:a.keydownListenerCapture}),a.keydownHandlerAdded=!0),e=s,"select"===(a=c).input||"radio"===a.input?jt(e,a):["text","email","number","tel","textarea"].includes(a.input)&&(u(a.inputValue)||p(a.inputValue))&&(De(P()),Dt(e,a)),Bt(c),tn(Me,c,t),nn(r,c),setTimeout(()=>{r.container.scrollTop=0})})},update:function(t){var e=v(),n=he.innerParams.get(this);if(!e||N(e,n.hideClass.popup))return s("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const o={};Object.keys(t).forEach(e=>{ln.isUpdatableParameter(e)?o[e]=t[e]:s('Invalid parameter to update: "'.concat(e,'". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md'))}),n=Object.assign({},n,o),Oe(this,n),he.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,t),writable:!1,enumerable:!0}})},_destroy:function(){var e=he.domCache.get(this);const t=he.innerParams.get(this);t&&(e.popup&&Me.swalCloseEventFinishedCallback&&(Me.swalCloseEventFinishedCallback(),delete Me.swalCloseEventFinishedCallback),Me.deferDisposalTimer&&(clearTimeout(Me.deferDisposalTimer),delete Me.deferDisposalTimer),"function"==typeof t.didDestroy&&t.didDestroy(),delete this.params,delete Me.keydownHandler,delete Me.keydownTarget,sn(he),sn(it),delete Me.currentInstance)}});let rn;class cn{constructor(...e){"undefined"!=typeof window&&(rn=this,e=Object.freeze(this.constructor.argsToParams(e)),Object.defineProperties(this,{params:{value:e,writable:!1,enumerable:!0,configurable:!0}}),e=this._main(this.params),he.promise.set(this,e))}then(e){const t=he.promise.get(this);return t.then(e)}finally(e){const t=he.promise.get(this);return t.finally(e)}}Object.assign(cn.prototype,e),Object.assign(cn,Je),Object.keys(e).forEach(t=>{cn[t]=function(...e){if(rn)return rn[t](...e)}}),cn.DismissReason=l,cn.version="11.1.5";const ln=cn;return ln.default=ln,ln}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2); \ No newline at end of file From e30433cfa5237b55490da593361944c78ad49616 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Tue, 21 Sep 2021 14:19:34 +0300 Subject: [PATCH 07/42] handle prelease identifiers --- npm/ng-packs/scripts/package.json | 3 ++- npm/ng-packs/scripts/publish.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/scripts/package.json b/npm/ng-packs/scripts/package.json index 3984a00b14..b0961239bb 100644 --- a/npm/ng-packs/scripts/package.json +++ b/npm/ng-packs/scripts/package.json @@ -17,7 +17,8 @@ "execa": "^2.0.3", "fs-extra": "^8.1.0", "glob": "^7.1.6", - "prompt-confirm": "^2.0.4" + "prompt-confirm": "^2.0.4", + "semver": "^7.3.5" }, "devDependencies": { "@types/fs-extra": "^8.0.1", diff --git a/npm/ng-packs/scripts/publish.ts b/npm/ng-packs/scripts/publish.ts index 75f677b4b9..9ff2057093 100644 --- a/npm/ng-packs/scripts/publish.ts +++ b/npm/ng-packs/scripts/publish.ts @@ -2,6 +2,7 @@ import program from 'commander'; import execa from 'execa'; import fse from 'fs-extra'; import replaceWithPreview from './replace-with-preview'; +const semverParse = require('semver/functions/parse'); program .option( @@ -50,7 +51,7 @@ program.parse(process.argv); let tag: string; if (program.preview) tag = 'preview'; - if (program.rc) tag = 'next'; + else if (program.rc || semverParse(program.nextVersion).prerelease?.length) tag = 'next'; await execa( 'yarn', From 92c5f613480c78fa9d04a56ec50f4698739ba09e Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Tue, 21 Sep 2021 14:19:44 +0300 Subject: [PATCH 08/42] reinstall packages --- npm/ng-packs/package.json | 4 ++-- npm/ng-packs/scripts/yarn.lock | 19 +++++++++++++++++++ npm/ng-packs/yarn.lock | 2 +- npm/publish.ps1 | 2 -- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index d8718d737f..6ba0a57603 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -48,7 +48,7 @@ "@abp/ng.tenant-management": "~4.4.2", "@abp/ng.theme.basic": "~4.4.2", "@abp/ng.theme.shared": "~4.4.2", - "@abp/utils": "^4.4.2", + "@abp/utils": "~4.4.2", "@angular-devkit/build-angular": "~12.2.0", "@angular-devkit/build-ng-packagr": "^0.1002.0", "@angular-devkit/schematics-cli": "~12.2.0", @@ -115,4 +115,4 @@ "typescript": "~4.3.5", "zone.js": "~0.11.4" } -} +} \ No newline at end of file diff --git a/npm/ng-packs/scripts/yarn.lock b/npm/ng-packs/scripts/yarn.lock index 975620872f..0bee64a70e 100644 --- a/npm/ng-packs/scripts/yarn.lock +++ b/npm/ng-packs/scripts/yarn.lock @@ -834,6 +834,13 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -1060,6 +1067,13 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + set-getter@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.1.tgz#a3110e1b461d31a9cfc8c5c9ee2e9737ad447102" @@ -1263,6 +1277,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index ccd80d41f1..1d605fa81a 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -118,7 +118,7 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^4.4.2": +"@abp/utils@^4.4.2", "@abp/utils@~4.4.2": version "4.4.2" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.2.tgz#33d1a8c1199241e0c926fb3fd2f439d2925d5db1" integrity sha512-o/1XGKSOPB+yQH6c+yyMNSr/r8rzb3PoHkxKqDNEGEf79L6EwJ8Wm+4wKaoHjVrYQtn+d/40PLEdvGEwQxVvCw== diff --git a/npm/publish.ps1 b/npm/publish.ps1 index 486c6c6f4e..fddd8f2acd 100644 --- a/npm/publish.ps1 +++ b/npm/publish.ps1 @@ -23,8 +23,6 @@ $UpdateNgPacksCommand = "yarn update --registry $Registry" $IsRc = $(node publish-utils.js --rc --customVersion $Version) -eq "true"; - - if ($IsRc) { $NgPacksPublishCommand += " --rc" $UpdateGulpCommand += " -- --rc" From a7d8017d68fe76662371a4bbc3829f89332a4bf2 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Tue, 21 Sep 2021 21:20:38 +0300 Subject: [PATCH 09/42] handle prerelase identifiers --- npm/ng-packs/scripts/publish.ts | 3 +-- npm/package-update-script.js | 34 ++++++++++++------------- npm/package.json | 3 ++- npm/publish-utils.js | 22 +++++++++-------- npm/publish.ps1 | 13 +++++----- npm/update-gulp.js | 44 ++++++++++++++++----------------- 6 files changed, 60 insertions(+), 59 deletions(-) diff --git a/npm/ng-packs/scripts/publish.ts b/npm/ng-packs/scripts/publish.ts index 9ff2057093..ecc0408f2b 100644 --- a/npm/ng-packs/scripts/publish.ts +++ b/npm/ng-packs/scripts/publish.ts @@ -11,7 +11,6 @@ program ) .option('-r, --registry ', 'target npm server registry') .option('-p, --preview', 'publishes with preview tag') - .option('-r, --rc', 'publishes with next tag') .option('-g, --skipGit', 'skips git push'); program.parse(process.argv); @@ -51,7 +50,7 @@ program.parse(process.argv); let tag: string; if (program.preview) tag = 'preview'; - else if (program.rc || semverParse(program.nextVersion).prerelease?.length) tag = 'next'; + else if (semverParse(program.nextVersion).prerelease?.length) tag = 'next'; await execa( 'yarn', diff --git a/npm/package-update-script.js b/npm/package-update-script.js index 58e24db554..8ca0180eb1 100644 --- a/npm/package-update-script.js +++ b/npm/package-update-script.js @@ -1,39 +1,39 @@ -const glob = require('glob'); -var path = require('path'); -const childProcess = require('child_process'); -const { program } = require('commander'); +const glob = require("glob"); +var path = require("path"); +const childProcess = require("child_process"); +const { program } = require("commander"); -program.version('0.0.1'); -program.option('-r, --rc', 'whether version is rc'); -program.option('-rg, --registry ', 'target npm server registry') +program.version("0.0.1"); +program.option("-r, --prerelase", "whether version is prerelase"); +program.option("-rg, --registry ", "target npm server registry"); program.parse(process.argv); -const packages = (process.argv[3] || 'abp').split(',').join('|'); +const packages = (process.argv[3] || "abp").split(",").join("|"); const check = (pkgJsonPath) => { try { return childProcess .execSync( `ncu "/^@(${packages}).*$/" --packageFile ${pkgJsonPath} -u${ - program.rc ? ' --target greatest' : '' - }${program.registry ? ` --registry ${program.registry}` : ''}` + program.prerelase ? " --target greatest" : "" + }${program.registry ? ` --registry ${program.registry}` : ""}` ) .toString(); } catch (error) { - console.log('exec error: ' + error.message); + console.log("exec error: " + error.message); process.exit(error.status); } }; -const folder = process.argv[2] || '.'; +const folder = process.argv[2] || "."; -glob(folder + '/**/package.json', {}, (er, files) => { +glob(folder + "/**/package.json", {}, (er, files) => { files.forEach((file) => { if ( - file.includes('node_modules') || - file.includes('ng-packs/dist') || - file.includes('wwwroot') || - file.includes('bin/Debug') + file.includes("node_modules") || + file.includes("ng-packs/dist") || + file.includes("wwwroot") || + file.includes("bin/Debug") ) { return; } diff --git a/npm/package.json b/npm/package.json index 724b0f7be1..6de0301e60 100644 --- a/npm/package.json +++ b/npm/package.json @@ -16,6 +16,7 @@ "dependencies": { "commander": "^6.0.0", "execa": "^3.4.0", - "fs-extra": "^8.1.0" + "fs-extra": "^8.1.0", + "semver": "^7.3.5" } } diff --git a/npm/publish-utils.js b/npm/publish-utils.js index 395045c374..ff97d3e6d9 100644 --- a/npm/publish-utils.js +++ b/npm/publish-utils.js @@ -1,22 +1,24 @@ -const { program } = require('commander'); -const fse = require('fs-extra'); +const { program } = require("commander"); +const fse = require("fs-extra"); +const semverParse = require("semver/functions/parse"); -program.version('0.0.1'); -program.option('-n, --nextVersion', 'version in common.props'); -program.option('-r, --rc', 'whether version is rc'); -program.option('-cv, --customVersion ', 'set exact version'); +program.version("0.0.1"); +program.option("-n, --nextVersion", "version in common.props"); +program.option("-pr, --prerelase", "whether version is prerelase"); +program.option("-cv, --customVersion ", "set exact version"); program.parse(process.argv); if (program.nextVersion) console.log(getVersion()); -if (program.rc) console.log(getVersion().includes('rc')); +if (program.prerelase) + console.log(!!semverParse(getVersion()).prerelease?.length); function getVersion() { if (program.customVersion) return program.customVersion; - const commonProps = fse.readFileSync('../common.props').toString(); - const versionTag = ''; - const versionEndTag = ''; + const commonProps = fse.readFileSync("../common.props").toString(); + const versionTag = ""; + const versionEndTag = ""; const first = commonProps.indexOf(versionTag) + versionTag.length; const last = commonProps.indexOf(versionEndTag); return commonProps.substring(first, last); diff --git a/npm/publish.ps1 b/npm/publish.ps1 index fddd8f2acd..e563fc1fef 100644 --- a/npm/publish.ps1 +++ b/npm/publish.ps1 @@ -3,7 +3,7 @@ param( [string]$Registry ) -npm install +yarn install $NextVersion = $(node publish-utils.js --nextVersion) $RootFolder = (Get-Item -Path "./" -Verbose).FullName @@ -21,13 +21,12 @@ $PacksPublishCommand = "npm run lerna -- exec 'npm publish --registry $Registry' $UpdateGulpCommand = "npm run update-gulp" $UpdateNgPacksCommand = "yarn update --registry $Registry" -$IsRc = $(node publish-utils.js --rc --customVersion $Version) -eq "true"; +$IsPrerelase = $(node publish-utils.js --prerelase --customVersion $Version) -eq "true"; -if ($IsRc) { - $NgPacksPublishCommand += " --rc" - $UpdateGulpCommand += " -- --rc" +if ($IsPrerelase) { + $UpdateGulpCommand += " -- --prerelase" $PacksPublishCommand = $PacksPublishCommand.Substring(0, $PacksPublishCommand.Length - 1) + " --tag next'" - $UpdateNgPacksCommand += " --rc" + $UpdateNgPacksCommand += " --prerelase" } $commands = ( @@ -36,7 +35,7 @@ $commands = ( $PacksPublishCommand, $UpdateNgPacksCommand, "cd ng-packs\scripts", - "npm install", + "yarn install", $NgPacksPublishCommand, "cd ../../", "cd scripts", diff --git a/npm/update-gulp.js b/npm/update-gulp.js index d6076978eb..d090de4dae 100644 --- a/npm/update-gulp.js +++ b/npm/update-gulp.js @@ -1,27 +1,27 @@ -const glob = require('glob'); -var path = require('path'); -const childProcess = require('child_process'); -const execa = require('execa'); -const fse = require('fs-extra'); -const { program } = require('commander'); +const glob = require("glob"); +var path = require("path"); +const childProcess = require("child_process"); +const execa = require("execa"); +const fse = require("fs-extra"); +const { program } = require("commander"); -program.version('0.0.1'); -program.option('-r, --rc', 'whether version is rc'); +program.version("0.0.1"); +program.option("-pr, --prerelase", "whether version is prerelase"); program.parse(process.argv); const gulp = (folderPath) => { if ( - !fse.existsSync(folderPath + 'gulpfile.js') || - !glob.sync(folderPath + '*.csproj').length + !fse.existsSync(folderPath + "gulpfile.js") || + !glob.sync(folderPath + "*.csproj").length ) { return; } try { - execa.sync(`yarn`, ['install'], { cwd: folderPath, stdio: 'inherit' }); - execa.sync(`yarn`, ['gulp'], { cwd: folderPath, stdio: 'inherit' }); + execa.sync(`yarn`, ["install"], { cwd: folderPath, stdio: "inherit" }); + execa.sync(`yarn`, ["gulp"], { cwd: folderPath, stdio: "inherit" }); } catch (error) { - console.log('\x1b[31m', 'Error: ' + error.message); + console.log("\x1b[31m", "Error: " + error.message); } }; @@ -30,30 +30,30 @@ const updatePackages = (pkgJsonPath) => { const result = childProcess .execSync( `ncu "/^@abp.*$/" --packageFile ${pkgJsonPath} -u${ - program.rc ? ' --target greatest' : '' + program.prerelase ? " --target greatest" : "" }` ) .toString(); - console.log('\x1b[0m', result); + console.log("\x1b[0m", result); } catch (error) { - console.log('\x1b[31m', 'Error: ' + error.message); + console.log("\x1b[31m", "Error: " + error.message); } }; console.time(); -glob('../**/package.json', {}, (er, files) => { +glob("../**/package.json", {}, (er, files) => { files = files.filter( (f) => f && - !f.includes('node_modules') && - !f.includes('wwwroot') && - !f.includes('bin') && - !f.includes('obj') + !f.includes("node_modules") && + !f.includes("wwwroot") && + !f.includes("bin") && + !f.includes("obj") ); files.forEach((file) => { updatePackages(file); - gulp(file.replace('package.json', '')); + gulp(file.replace("package.json", "")); }); console.timeEnd(); }); From 1b44dfb98ade28abe12bbd248facb642d9ae2f16 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 22 Sep 2021 08:29:42 +0300 Subject: [PATCH 10/42] format script files via prettier --- npm/package-update-script.js | 34 ++++++++++++++-------------- npm/publish-utils.js | 20 ++++++++-------- npm/update-gulp.js | 44 ++++++++++++++++++------------------ 3 files changed, 49 insertions(+), 49 deletions(-) diff --git a/npm/package-update-script.js b/npm/package-update-script.js index 8ca0180eb1..27930f096c 100644 --- a/npm/package-update-script.js +++ b/npm/package-update-script.js @@ -1,39 +1,39 @@ -const glob = require("glob"); -var path = require("path"); -const childProcess = require("child_process"); -const { program } = require("commander"); +const glob = require('glob'); +var path = require('path'); +const childProcess = require('child_process'); +const { program } = require('commander'); -program.version("0.0.1"); -program.option("-r, --prerelase", "whether version is prerelase"); -program.option("-rg, --registry ", "target npm server registry"); +program.version('0.0.1'); +program.option('-pr, --prerelase', 'whether version is prerelase'); +program.option('-rg, --registry ', 'target npm server registry'); program.parse(process.argv); -const packages = (process.argv[3] || "abp").split(",").join("|"); +const packages = (process.argv[3] || 'abp').split(',').join('|'); const check = (pkgJsonPath) => { try { return childProcess .execSync( `ncu "/^@(${packages}).*$/" --packageFile ${pkgJsonPath} -u${ - program.prerelase ? " --target greatest" : "" - }${program.registry ? ` --registry ${program.registry}` : ""}` + program.prerelase ? ' --target greatest' : '' + }${program.registry ? ` --registry ${program.registry}` : ''}` ) .toString(); } catch (error) { - console.log("exec error: " + error.message); + console.log('exec error: ' + error.message); process.exit(error.status); } }; -const folder = process.argv[2] || "."; +const folder = process.argv[2] || '.'; -glob(folder + "/**/package.json", {}, (er, files) => { +glob(folder + '/**/package.json', {}, (er, files) => { files.forEach((file) => { if ( - file.includes("node_modules") || - file.includes("ng-packs/dist") || - file.includes("wwwroot") || - file.includes("bin/Debug") + file.includes('node_modules') || + file.includes('ng-packs/dist') || + file.includes('wwwroot') || + file.includes('bin/Debug') ) { return; } diff --git a/npm/publish-utils.js b/npm/publish-utils.js index ff97d3e6d9..f3fb83c155 100644 --- a/npm/publish-utils.js +++ b/npm/publish-utils.js @@ -1,11 +1,11 @@ -const { program } = require("commander"); -const fse = require("fs-extra"); -const semverParse = require("semver/functions/parse"); +const { program } = require('commander'); +const fse = require('fs-extra'); +const semverParse = require('semver/functions/parse'); -program.version("0.0.1"); -program.option("-n, --nextVersion", "version in common.props"); -program.option("-pr, --prerelase", "whether version is prerelase"); -program.option("-cv, --customVersion ", "set exact version"); +program.version('0.0.1'); +program.option('-n, --nextVersion', 'version in common.props'); +program.option('-pr, --prerelase', 'whether version is prerelase'); +program.option('-cv, --customVersion ', 'set exact version'); program.parse(process.argv); @@ -16,9 +16,9 @@ if (program.prerelase) function getVersion() { if (program.customVersion) return program.customVersion; - const commonProps = fse.readFileSync("../common.props").toString(); - const versionTag = ""; - const versionEndTag = ""; + const commonProps = fse.readFileSync('../common.props').toString(); + const versionTag = ''; + const versionEndTag = ''; const first = commonProps.indexOf(versionTag) + versionTag.length; const last = commonProps.indexOf(versionEndTag); return commonProps.substring(first, last); diff --git a/npm/update-gulp.js b/npm/update-gulp.js index d090de4dae..6f95dfb8a1 100644 --- a/npm/update-gulp.js +++ b/npm/update-gulp.js @@ -1,27 +1,27 @@ -const glob = require("glob"); -var path = require("path"); -const childProcess = require("child_process"); -const execa = require("execa"); -const fse = require("fs-extra"); -const { program } = require("commander"); +const glob = require('glob'); +var path = require('path'); +const childProcess = require('child_process'); +const execa = require('execa'); +const fse = require('fs-extra'); +const { program } = require('commander'); -program.version("0.0.1"); -program.option("-pr, --prerelase", "whether version is prerelase"); +program.version('0.0.1'); +program.option('-pr, --prerelase', 'whether version is prerelase'); program.parse(process.argv); const gulp = (folderPath) => { if ( - !fse.existsSync(folderPath + "gulpfile.js") || - !glob.sync(folderPath + "*.csproj").length + !fse.existsSync(folderPath + 'gulpfile.js') || + !glob.sync(folderPath + '*.csproj').length ) { return; } try { - execa.sync(`yarn`, ["install"], { cwd: folderPath, stdio: "inherit" }); - execa.sync(`yarn`, ["gulp"], { cwd: folderPath, stdio: "inherit" }); + execa.sync('yarn', ['install'], { cwd: folderPath, stdio: 'inherit' }); + execa.sync('yarn', ['gulp'], { cwd: folderPath, stdio: 'inherit' }); } catch (error) { - console.log("\x1b[31m", "Error: " + error.message); + console.log('\x1b[31m', 'Error: ' + error.message); } }; @@ -30,30 +30,30 @@ const updatePackages = (pkgJsonPath) => { const result = childProcess .execSync( `ncu "/^@abp.*$/" --packageFile ${pkgJsonPath} -u${ - program.prerelase ? " --target greatest" : "" + program.prerelase ? ' --target greatest' : '' }` ) .toString(); - console.log("\x1b[0m", result); + console.log('\x1b[0m', result); } catch (error) { - console.log("\x1b[31m", "Error: " + error.message); + console.log('\x1b[31m', 'Error: ' + error.message); } }; console.time(); -glob("../**/package.json", {}, (er, files) => { +glob('../**/package.json', {}, (er, files) => { files = files.filter( (f) => f && - !f.includes("node_modules") && - !f.includes("wwwroot") && - !f.includes("bin") && - !f.includes("obj") + !f.includes('node_modules') && + !f.includes('wwwroot') && + !f.includes('bin') && + !f.includes('obj') ); files.forEach((file) => { updatePackages(file); - gulp(file.replace("package.json", "")); + gulp(file.replace('package.json', '')); }); console.timeEnd(); }); From 0cf5f8853bb361f06e9aa547d16277d7db8f9c34 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 22 Sep 2021 09:20:20 +0300 Subject: [PATCH 11/42] Update Background-Jobs-Hangfire.md --- docs/en/Background-Jobs-Hangfire.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/docs/en/Background-Jobs-Hangfire.md b/docs/en/Background-Jobs-Hangfire.md index a690d9d17b..3bde5ea010 100644 --- a/docs/en/Background-Jobs-Hangfire.md +++ b/docs/en/Background-Jobs-Hangfire.md @@ -88,17 +88,21 @@ To make it secure by default, only local requests are allowed, however you can c You can integrate the Hangfire dashboard to [ABP authorization system](Authorization.md) using the **AbpHangfireAuthorizationFilter** class. This class is defined in the `Volo.Abp.Hangfire` package. The following example, checks if the current user is logged in to the application: - app.UseHangfireDashboard("/hangfire", new DashboardOptions - { - AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter() } - }); +```csharp +app.UseHangfireDashboard("/hangfire", new DashboardOptions +{ + AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter() } +}); +``` If you want to require an additional permission, you can pass it into the constructor as below: - app.UseHangfireDashboard("/hangfire", new DashboardOptions - { - AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") } - }); +```csharp +app.UseHangfireDashboard("/hangfire", new DashboardOptions +{ + AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") } +}); +``` -**Important**: `UseHangfireDashboard` should be called after the authentication middleware in your `Startup` class (probably at the last line). Otherwise, +**Important**: `UseHangfireDashboard` should be called after the authentication and authorization middlewares in your `Startup` class (probably at the last line). Otherwise, authorization will always fail! From 5d6b99c529f168411d0dab8188db15cd9bb9d2bb Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 22 Sep 2021 10:21:30 +0300 Subject: [PATCH 12/42] use fast-glob instead of regular glob package --- npm/package.json | 1 + npm/update-gulp.js | 14 +++++++++----- npm/yarn.lock | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/npm/package.json b/npm/package.json index 6de0301e60..2838e8eac0 100644 --- a/npm/package.json +++ b/npm/package.json @@ -16,6 +16,7 @@ "dependencies": { "commander": "^6.0.0", "execa": "^3.4.0", + "fast-glob": "^3.2.7", "fs-extra": "^8.1.0", "semver": "^7.3.5" } diff --git a/npm/update-gulp.js b/npm/update-gulp.js index 6f95dfb8a1..678c6a043b 100644 --- a/npm/update-gulp.js +++ b/npm/update-gulp.js @@ -1,4 +1,4 @@ -const glob = require('glob'); +const glob = require('fast-glob'); var path = require('path'); const childProcess = require('child_process'); const execa = require('execa'); @@ -18,6 +18,7 @@ const gulp = (folderPath) => { } try { + fse.removeSync(`${folderPath}/wwwroot/libs`); execa.sync('yarn', ['install'], { cwd: folderPath, stdio: 'inherit' }); execa.sync('yarn', ['gulp'], { cwd: folderPath, stdio: 'inherit' }); } catch (error) { @@ -40,8 +41,9 @@ const updatePackages = (pkgJsonPath) => { } }; -console.time(); -glob('../**/package.json', {}, (er, files) => { +(async () => { + console.time(); + let files = await glob('../**/package.json'); files = files.filter( (f) => f && @@ -53,7 +55,9 @@ glob('../**/package.json', {}, (er, files) => { files.forEach((file) => { updatePackages(file); - gulp(file.replace('package.json', '')); + const folderPath = file.replace('package.json', ''); + gulp(folderPath); }); + console.timeEnd(); -}); +})(); diff --git a/npm/yarn.lock b/npm/yarn.lock index 5924e105bb..38e7e00716 100644 --- a/npm/yarn.lock +++ b/npm/yarn.lock @@ -2266,7 +2266,7 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.1.1: +fast-glob@^3.1.1, fast-glob@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== From 41fb0c3834759107d7d89f67b63b90af592c7d42 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 22 Sep 2021 13:29:08 +0300 Subject: [PATCH 13/42] install @angular/localize & update angular versions --- templates/app/angular/package.json | 45 ++++++++--------- templates/app/angular/src/polyfills.ts | 5 ++ templates/module/angular/package.json | 48 ++++++++++--------- .../angular/projects/dev-app/src/polyfills.ts | 5 ++ 4 files changed, 58 insertions(+), 45 deletions(-) diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 3314464704..fc56da87ad 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -20,40 +20,41 @@ "@abp/ng.tenant-management": "~4.4.2", "@abp/ng.theme.basic": "~4.4.2", "@abp/ng.theme.shared": "~4.4.2", - "@angular/animations": "~12.0.0", - "@angular/common": "~12.0.0", - "@angular/compiler": "~12.0.0", - "@angular/core": "~12.0.0", - "@angular/forms": "~12.0.0", - "@angular/platform-browser-dynamic": "~12.0.0", - "@angular/platform-browser": "~12.0.0", - "@angular/router": "~12.0.0", + "@angular/animations": "~12.2.6", + "@angular/common": "~12.2.6", + "@angular/compiler": "~12.2.6", + "@angular/core": "~12.2.6", + "@angular/forms": "~12.2.6", + "@angular/localize": "~12.2.6", + "@angular/platform-browser": "~12.2.6", + "@angular/platform-browser-dynamic": "~12.2.6", + "@angular/router": "~12.2.6", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.11.4" }, "devDependencies": { "@abp/ng.schematics": "~4.4.2", - "@angular-devkit/build-angular": "~12.0.0", - "@angular-eslint/builder": "12.1.0", - "@angular-eslint/eslint-plugin-template": "12.1.0", - "@angular-eslint/eslint-plugin": "12.1.0", - "@angular-eslint/schematics": "12.1.0", - "@angular-eslint/template-parser": "12.1.0", - "@angular/cli": "~12.0.0", - "@angular/compiler-cli": "~12.0.0", - "@angular/language-service": "~12.0.4", + "@angular-devkit/build-angular": "~12.2.6", + "@angular-eslint/builder": "~12.5.0", + "@angular-eslint/eslint-plugin": "~12.5.0", + "@angular-eslint/eslint-plugin-template": "~12.5.0", + "@angular-eslint/schematics": "~12.5.0", + "@angular-eslint/template-parser": "~12.5.0", + "@angular/cli": "~12.2.6", + "@angular/compiler-cli": "~12.2.6", + "@angular/language-service": "~12.2.6", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", - "@typescript-eslint/eslint-plugin": "4.23.0", - "@typescript-eslint/parser": "4.23.0", - "eslint": "^7.26.0", + "@typescript-eslint/eslint-plugin": "~4.31.2", + "@typescript-eslint/parser": "~4.31.2", + "eslint": "^7.32.0", "jasmine-core": "~3.7.0", + "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.0.3", - "karma-jasmine-html-reporter": "^1.5.0", "karma-jasmine": "~4.0.0", - "karma": "~6.3.0", + "karma-jasmine-html-reporter": "^1.5.0", "ng-packagr": "^12.0.5", "typescript": "~4.2.3" } diff --git a/templates/app/angular/src/polyfills.ts b/templates/app/angular/src/polyfills.ts index 0cd2913442..9ba0f49439 100644 --- a/templates/app/angular/src/polyfills.ts +++ b/templates/app/angular/src/polyfills.ts @@ -57,3 +57,8 @@ import 'zone.js'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS */ + +/****************************************************************** + * Load `$localize` - used if i18n tags appear in Angular templates. + */ + import '@angular/localize/init'; \ No newline at end of file diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 6f7182950e..9d22c4fe42 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -4,9 +4,9 @@ "scripts": { "ng": "ng", "start": "ng serve dev-app --open", - "build": "ng build my-project-name --prod", - "build:app": "npm run symlink:copy -- --no-watch && ng build dev-app --prod", - "symlink:copy": "symlink copy --angular --packages @my-company-name/my-project-name --prod", + "build": "ng build my-project-name --configuration production", + "build:app": "npm run symlink:copy -- --no-watch && ng build dev-app --configuration production", + "symlink:copy": "symlink copy --angular --packages @my-company-name/my-project-name --configuration production", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", @@ -23,34 +23,35 @@ "@abp/ng.tenant-management": "~4.4.2", "@abp/ng.theme.basic": "~4.4.2", "@abp/ng.theme.shared": "~4.4.2", - "@angular/animations": "~12.0.0", - "@angular/common": "~12.0.0", - "@angular/compiler": "~12.0.0", - "@angular/core": "~12.0.0", - "@angular/forms": "~12.0.0", - "@angular/platform-browser": "~12.0.0", - "@angular/platform-browser-dynamic": "~12.0.0", - "@angular/router": "~12.0.0", + "@angular/animations": "~12.2.6", + "@angular/common": "~12.2.6", + "@angular/compiler": "~12.2.6", + "@angular/core": "~12.2.6", + "@angular/forms": "~12.2.6", + "@angular/localize": "~12.2.6", + "@angular/platform-browser": "~12.2.6", + "@angular/platform-browser-dynamic": "~12.2.6", + "@angular/router": "~12.2.6", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.11.4" }, "devDependencies": { "@abp/ng.schematics": "~4.4.2", - "symlink-manager": "^1.5.0", - "@angular-devkit/build-angular": "~12.0.4", - "@angular-eslint/builder": "12.1.0", - "@angular-eslint/eslint-plugin": "12.1.0", - "@angular-eslint/eslint-plugin-template": "12.1.0", - "@angular-eslint/schematics": "12.1.0", - "@angular-eslint/template-parser": "12.1.0", - "@angular/cli": "~12.0.0", - "@angular/compiler-cli": "~12.0.0", + "@angular-devkit/build-angular": "~12.2.6", + "@angular-eslint/builder": "~12.5.0", + "@angular-eslint/eslint-plugin": "~12.5.0", + "@angular-eslint/eslint-plugin-template": "~12.5.0", + "@angular-eslint/schematics": "~12.5.0", + "@angular-eslint/template-parser": "~12.5.0", + "@angular/cli": "~12.2.6", + "@angular/compiler-cli": "~12.2.6", + "@angular/language-service": "~12.2.6", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", - "@typescript-eslint/eslint-plugin": "4.23.0", - "@typescript-eslint/parser": "4.23.0", - "eslint": "^7.26.0", + "@typescript-eslint/eslint-plugin": "~4.31.2", + "@typescript-eslint/parser": "~4.31.2", + "eslint": "^7.32.0", "jasmine-core": "~3.7.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", @@ -58,6 +59,7 @@ "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "ng-packagr": "^12.0.0", + "symlink-manager": "^1.5.0", "typescript": "~4.2.3" } } diff --git a/templates/module/angular/projects/dev-app/src/polyfills.ts b/templates/module/angular/projects/dev-app/src/polyfills.ts index 0cd2913442..9ba0f49439 100644 --- a/templates/module/angular/projects/dev-app/src/polyfills.ts +++ b/templates/module/angular/projects/dev-app/src/polyfills.ts @@ -57,3 +57,8 @@ import 'zone.js'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS */ + +/****************************************************************** + * Load `$localize` - used if i18n tags appear in Angular templates. + */ + import '@angular/localize/init'; \ No newline at end of file From 7057da5a678449ffbd2cb0ee2d189f663602be32 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 22 Sep 2021 14:20:31 +0300 Subject: [PATCH 14/42] remove all deprecated code --- .../packages/core/src/lib/core.module.ts | 5 +- .../packages/core/src/lib/directives/index.ts | 1 - .../lib/directives/permission.directive.ts | 20 +- .../lib/directives/visibility.directive.ts | 66 ---- .../lib/models/application-configuration.ts | 117 ------ .../packages/core/src/lib/models/index.ts | 1 - .../packages/core/src/lib/models/session.ts | 15 - .../application-configuration.service.ts | 24 -- .../core/src/lib/services/auth.service.ts | 7 - .../src/lib/services/config-state.service.ts | 14 +- .../packages/core/src/lib/services/index.ts | 1 - .../src/lib/services/multi-tenancy.service.ts | 38 +- .../packages/core/src/lib/utils/rxjs-utils.ts | 28 -- .../theme-shared/src/lib/components/index.ts | 3 - .../modal/modal-container.component.ts | 13 - .../lib/components/modal/modal.component.ts | 20 -- .../sort-order-icon.component.html | 3 - .../sort-order-icon.component.ts | 63 ---- .../table-empty-message.component.ts | 28 -- .../lib/components/table/table.component.html | 81 ----- .../lib/components/table/table.component.scss | 337 ------------------ .../lib/components/table/table.component.ts | 110 ------ .../theme-shared/src/lib/directives/index.ts | 3 +- .../lib/directives/table-sort.directive.ts | 57 --- .../theme-shared/src/lib/services/index.ts | 3 +- .../src/lib/services/modal.service.ts | 54 --- .../src/lib/theme-shared.module.ts | 12 +- 27 files changed, 15 insertions(+), 1109 deletions(-) delete mode 100644 npm/ng-packs/packages/core/src/lib/directives/visibility.directive.ts delete mode 100644 npm/ng-packs/packages/core/src/lib/models/application-configuration.ts delete mode 100644 npm/ng-packs/packages/core/src/lib/services/application-configuration.service.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-container.component.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/services/modal.service.ts diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 7529f62c5e..d951f965ee 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -16,7 +16,6 @@ import { InitDirective } from './directives/init.directive'; import { PermissionDirective } from './directives/permission.directive'; import { ReplaceableTemplateDirective } from './directives/replaceable-template.directive'; import { StopPropagationDirective } from './directives/stop-propagation.directive'; -import { VisibilityDirective } from './directives/visibility.directive'; import { OAuthConfigurationHandler } from './handlers/oauth-configuration.handler'; import { RoutesHandler } from './handlers/routes.handler'; import { ApiInterceptor } from './interceptors/api.interceptor'; @@ -24,6 +23,7 @@ import { LocalizationModule } from './localization.module'; import { ABP } from './models/common'; import { LocalizationPipe } from './pipes/localization.pipe'; import { SortPipe } from './pipes/sort.pipe'; +import { CookieLanguageProvider } from './providers/cookie-language.provider'; import { LocaleProvider } from './providers/locale.provider'; import { LocalizationService } from './services/localization.service'; import { oAuthStorage } from './strategies/auth-flow.strategy'; @@ -32,7 +32,6 @@ import { TENANT_KEY } from './tokens/tenant-key.token'; import { noop } from './utils/common-utils'; import './utils/date-extensions'; import { getInitialData, localeInitializer } from './utils/initial-utils'; -import { CookieLanguageProvider } from './providers/cookie-language.provider'; export function storageFactory(): OAuthStorage { return oAuthStorage; @@ -65,7 +64,6 @@ export function storageFactory(): OAuthStorage { RouterOutletComponent, SortPipe, StopPropagationDirective, - VisibilityDirective, ], imports: [ OAuthModule, @@ -90,7 +88,6 @@ export function storageFactory(): OAuthStorage { RouterOutletComponent, SortPipe, StopPropagationDirective, - VisibilityDirective, ], providers: [LocalizationPipe], entryComponents: [ diff --git a/npm/ng-packs/packages/core/src/lib/directives/index.ts b/npm/ng-packs/packages/core/src/lib/directives/index.ts index 3322b14257..8f05e2daae 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/index.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/index.ts @@ -6,4 +6,3 @@ export * from './init.directive'; export * from './permission.directive'; export * from './replaceable-template.directive'; export * from './stop-propagation.directive'; -export * from './visibility.directive'; diff --git a/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts index 2e16cc0f2f..891c4c6e8c 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts @@ -40,28 +40,12 @@ export class PermissionDirective implements OnDestroy, OnChanges { .getGrantedPolicy$(this.condition) .pipe(distinctUntilChanged()) .subscribe(isGranted => { - if (this.templateRef) this.initStructural(isGranted); - else this.initAttribute(isGranted); - + this.vcRef.clear(); + if (isGranted) this.vcRef.createEmbeddedView(this.templateRef); this.cdRef.detectChanges(); }); } - private initStructural(isGranted: boolean) { - this.vcRef.clear(); - - if (isGranted) this.vcRef.createEmbeddedView(this.templateRef); - } - - /** - * @deprecated Will be deleted in v5.0 - */ - private initAttribute(isGranted: boolean) { - if (!isGranted) { - this.renderer.removeChild(this.elRef.nativeElement.parentElement, this.elRef.nativeElement); - } - } - ngOnDestroy(): void { if (this.subscription) this.subscription.unsubscribe(); } diff --git a/npm/ng-packs/packages/core/src/lib/directives/visibility.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/visibility.directive.ts deleted file mode 100644 index 20d341b36d..0000000000 --- a/npm/ng-packs/packages/core/src/lib/directives/visibility.directive.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { AfterViewInit, Directive, ElementRef, Input, Optional, Renderer2 } from '@angular/core'; -import { Subject } from 'rxjs'; - -/** - * - * @deprecated To be deleted in v5.0 - */ -@Directive({ - selector: '[abpVisibility]', -}) -export class VisibilityDirective implements AfterViewInit { - @Input('abpVisibility') - focusedElement: HTMLElement; - - completed$ = new Subject(); - - constructor(@Optional() private elRef: ElementRef, private renderer: Renderer2) {} - - ngAfterViewInit() { - if (!this.focusedElement && this.elRef) { - this.focusedElement = this.elRef.nativeElement; - } - - const observer = new MutationObserver(mutations => { - mutations.forEach(mutation => { - if (!mutation.target) return; - - const htmlNodes = - Array.from(mutation.target.childNodes || []).filter( - node => node instanceof HTMLElement, - ) || []; - - if (!htmlNodes.length) { - this.removeFromDOM(); - } - }); - }); - - observer.observe(this.focusedElement, { - childList: true, - }); - - setTimeout(() => { - const htmlNodes = - Array.from(this.focusedElement.childNodes || []).filter( - node => node instanceof HTMLElement, - ) || []; - - if (!htmlNodes.length) this.removeFromDOM(); - }, 0); - - this.completed$.subscribe(() => observer.disconnect()); - } - - disconnect() { - this.completed$.next(); - this.completed$.complete(); - } - - removeFromDOM() { - if (!this.elRef.nativeElement) return; - - this.renderer.removeChild(this.elRef.nativeElement.parentElement, this.elRef.nativeElement); - this.disconnect(); - } -} diff --git a/npm/ng-packs/packages/core/src/lib/models/application-configuration.ts b/npm/ng-packs/packages/core/src/lib/models/application-configuration.ts deleted file mode 100644 index eecc4874b9..0000000000 --- a/npm/ng-packs/packages/core/src/lib/models/application-configuration.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { ABP } from './common'; - -export namespace ApplicationConfiguration { - /** - * @deprecated Use the ApplicationConfigurationDto interface instead. To be deleted in v5.0. - */ - export interface Response { - localization: Localization; - auth: Auth; - setting: Value; - currentUser: CurrentUser; - currentTenant: CurrentTenant; - features: Value; - } - - /** - * @deprecated Use the ApplicationLocalizationConfigurationDto interface instead. To be deleted in v5.0. - */ - export interface Localization { - currentCulture: CurrentCulture; - defaultResourceName: string; - languages: Language[]; - values: LocalizationValue; - } - - /** - * @deprecated Use the Record> type instead. To be deleted in v5.0. - */ - export interface LocalizationValue { - [key: string]: { [key: string]: string }; - } - - /** - * @deprecated Use the LanguageInfo interface instead. To be deleted in v5.0. - */ - export interface Language { - cultureName: string; - uiCultureName: string; - displayName: string; - flagIcon: string; - } - - /** - * @deprecated Use the CurrentCultureDto interface instead. To be deleted in v5.0. - */ - export interface CurrentCulture { - cultureName: string; - dateTimeFormat: DateTimeFormat; - displayName: string; - englishName: string; - isRightToLeft: boolean; - name: string; - nativeName: string; - threeLetterIsoLanguageName: string; - twoLetterIsoLanguageName: string; - } - - /** - * @deprecated Use the DateTimeFormatDto interface instead. To be deleted in v5.0. - */ - export interface DateTimeFormat { - calendarAlgorithmType: string; - dateSeparator: string; - fullDateTimePattern: string; - longTimePattern: string; - shortDatePattern: string; - shortTimePattern: string; - } - - /** - * @deprecated Use the ApplicationAuthConfigurationDto interface instead. To be deleted in v5.0. - */ - export interface Auth { - policies: Policy; - grantedPolicies: Policy; - } - - /** - * @deprecated Use the Record type instead. To be deleted in v5.0. - */ - export interface Policy { - [key: string]: boolean; - } - - /** - * @deprecated To be deleted in v5.0. - */ - export interface Value { - values: ABP.Dictionary; - } - - /** - * @deprecated Use the CurrentUserDto interface instead. To be deleted in v5.0. - */ - export interface CurrentUser { - email: string; - emailVerified: false; - id: string; - isAuthenticated: boolean; - roles: string[]; - tenantId: string; - userName: string; - name: string; - phoneNumber: string; - phoneNumberVerified: boolean; - surName: string; - } - - /** - * @deprecated Use the CurrentTenantDto interface instead. To be deleted in v5.0. - */ - export interface CurrentTenant { - id: string; - name: string; - isAvailable?: boolean; - } -} diff --git a/npm/ng-packs/packages/core/src/lib/models/index.ts b/npm/ng-packs/packages/core/src/lib/models/index.ts index f41e208924..75450106ac 100644 --- a/npm/ng-packs/packages/core/src/lib/models/index.ts +++ b/npm/ng-packs/packages/core/src/lib/models/index.ts @@ -1,4 +1,3 @@ -export * from './application-configuration'; export * from './auth'; export * from './common'; export * from './dtos'; diff --git a/npm/ng-packs/packages/core/src/lib/models/session.ts b/npm/ng-packs/packages/core/src/lib/models/session.ts index 7ce516a180..e86e0a2616 100644 --- a/npm/ng-packs/packages/core/src/lib/models/session.ts +++ b/npm/ng-packs/packages/core/src/lib/models/session.ts @@ -4,20 +4,5 @@ export namespace Session { export interface State { language: string; tenant: CurrentTenantDto; - /** - * - * @deprecated To be deleted in v5.0 - */ - sessionDetail: SessionDetail; - } - - /** - * - * @deprecated To be deleted in v5.0 - */ - export interface SessionDetail { - openedTabCount: number; - lastExitTime: number; - remember: boolean; } } diff --git a/npm/ng-packs/packages/core/src/lib/services/application-configuration.service.ts b/npm/ng-packs/packages/core/src/lib/services/application-configuration.service.ts deleted file mode 100644 index cda78e79f3..0000000000 --- a/npm/ng-packs/packages/core/src/lib/services/application-configuration.service.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { Rest } from '../models/rest'; -import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; -import { RestService } from './rest.service'; - -/** - * @deprecated Use AbpApplicationConfigurationService instead. To be deleted in v5.0. - */ -@Injectable({ - providedIn: 'root', -}) -export class ApplicationConfigurationService { - constructor(private rest: RestService) {} - - getConfiguration(): Observable { - const request: Rest.Request = { - method: 'GET', - url: '/api/abp/application-configuration', - }; - - return this.rest.request(request, {}); - } -} diff --git a/npm/ng-packs/packages/core/src/lib/services/auth.service.ts b/npm/ng-packs/packages/core/src/lib/services/auth.service.ts index 816e5a5905..aa920c1633 100644 --- a/npm/ng-packs/packages/core/src/lib/services/auth.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/auth.service.ts @@ -42,13 +42,6 @@ export class AuthService { return this.strategy.logout(queryParams); } - /** - * @deprecated Use navigateToLogin method instead. To be deleted in v5.0 - */ - initLogin() { - this.strategy.navigateToLogin(); - } - navigateToLogin(queryParams?: Params) { this.strategy.navigateToLogin(queryParams); } diff --git a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts index 69cf23e8a4..3aadfa898b 100644 --- a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { Observable, Subject } from 'rxjs'; -import { map, take, switchMap } from 'rxjs/operators'; +import { map, switchMap, take } from 'rxjs/operators'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; import { InternalStore } from '../utils/internal-store-utils'; -import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; @Injectable({ providedIn: 'root', @@ -24,15 +24,7 @@ export class ConfigStateService { private initUpdateStream() { this.updateSubject .pipe(switchMap(() => this.abpConfigService.get())) - .subscribe(res => this.setState(res)); - } - - /** - * @deprecated do not use this method directly, instead call refreshAppState - * This method will be private in v5.0 - */ - setState(state: ApplicationConfigurationDto) { - this.store.set(state); + .subscribe(res => this.store.set(res)); } refreshAppState() { diff --git a/npm/ng-packs/packages/core/src/lib/services/index.ts b/npm/ng-packs/packages/core/src/lib/services/index.ts index e79fb59e4f..d5940e1b54 100644 --- a/npm/ng-packs/packages/core/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/src/lib/services/index.ts @@ -1,4 +1,3 @@ -export * from './application-configuration.service'; export * from './auth.service'; export * from './config-state.service'; export * from './content-projection.service'; diff --git a/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts b/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts index 99371f91e7..00b056ec8c 100644 --- a/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts @@ -1,16 +1,14 @@ -import { Injectable, Inject } from '@angular/core'; -import { switchMap, map } from 'rxjs/operators'; -import { Observable } from 'rxjs'; -import { ABP } from '../models/common'; +import { Inject, Injectable } from '@angular/core'; +import { map, switchMap } from 'rxjs/operators'; +import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy'; import { - FindTenantResultDto, CurrentTenantDto, + FindTenantResultDto, } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; -import { RestService } from './rest.service'; -import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; import { ConfigStateService } from './config-state.service'; +import { RestService } from './rest.service'; import { SessionStateService } from './session-state.service'; -import { TENANT_KEY } from '../tokens/tenant-key.token'; @Injectable({ providedIn: 'root' }) export class MultiTenancyService { @@ -33,30 +31,6 @@ export class MultiTenancyService { @Inject(TENANT_KEY) public tenantKey: string, ) {} - /** - * @deprecated Use AbpTenantService.findTenantByName method instead. To be deleted in v5.0. - */ - findTenantByName(name: string, headers: ABP.Dictionary): Observable { - return this.restService.request( - { - url: `/api/abp/multi-tenancy/tenants/by-name/${name}`, - method: 'GET', - headers, - }, - { apiName: this.apiName }, - ); - } - - /** - * @deprecated Use AbpTenantService.findTenantById method instead. To be deleted in v5.0. - */ - findTenantById(id: string, headers: ABP.Dictionary): Observable { - return this.restService.request( - { url: `/api/abp/multi-tenancy/tenants/by-id/${id}`, method: 'GET', headers }, - { apiName: this.apiName }, - ); - } - setTenantByName(tenantName: string) { return this.tenantService .findTenantByName(tenantName, { [this.tenantKey]: '' }) diff --git a/npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts index 4a237abbfc..9d81d523cb 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts @@ -1,31 +1,3 @@ -import { Observable, Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; - function isFunction(value) { return typeof value === 'function'; } - -/** - * @deprecated no longer working, please use SubscriptionService (https://docs.abp.io/en/abp/latest/UI/Angular/Subscription-Service) instead. - */ -export const takeUntilDestroy = - (componentInstance, destroyMethodName = 'ngOnDestroy') => - (source: Observable) => { - const originalDestroy = componentInstance[destroyMethodName]; - if (isFunction(originalDestroy) === false) { - throw new Error( - `${componentInstance.constructor.name} is using untilDestroyed but doesn't implement ${destroyMethodName}`, - ); - } - if (!componentInstance['__takeUntilDestroy']) { - componentInstance['__takeUntilDestroy'] = new Subject(); - - componentInstance[destroyMethodName] = function () { - // eslint-disable-next-line prefer-rest-params - isFunction(originalDestroy) && originalDestroy.apply(this, arguments); - componentInstance['__takeUntilDestroy'].next(true); - componentInstance['__takeUntilDestroy'].complete(); - }; - } - return source.pipe(takeUntil(componentInstance['__takeUntilDestroy'])); - }; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts index 5fe1fbb572..c131167685 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts @@ -7,8 +7,5 @@ export * from './loading/loading.component'; export * from './modal/modal-close.directive'; export * from './modal/modal-ref.service'; export * from './modal/modal.component'; -export * from './sort-order-icon/sort-order-icon.component'; -export * from './table-empty-message/table-empty-message.component'; -export * from './table/table.component'; export * from './toast-container/toast-container.component'; export * from './toast/toast.component'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-container.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-container.component.ts deleted file mode 100644 index 1b07955270..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-container.component.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Component, ViewChild, ViewContainerRef } from '@angular/core'; - -/** - * @deprecated To be removed in v5.0 - */ -@Component({ - selector: 'abp-modal-container', - template: '', -}) -export class ModalContainerComponent { - @ViewChild('container', { static: true, read: ViewContainerRef }) - container: ViewContainerRef; -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index 44aea4d9f7..44e077160b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -2,7 +2,6 @@ import { SubscriptionService, uuid } from '@abp/ng.core'; import { Component, ContentChild, - ElementRef, EventEmitter, Inject, Input, @@ -32,19 +31,6 @@ export type ModalSize = 'sm' | 'md' | 'lg' | 'xl'; providers: [SubscriptionService], }) export class ModalComponent implements OnInit, OnDestroy, DismissableModal { - /** - * @deprecated Use centered property of options input instead. To be deleted in v5.0. - */ - @Input() centered = false; - /** - * @deprecated Use windowClass property of options input instead. To be deleted in v5.0. - */ - @Input() modalClass = ''; - /** - * @deprecated Use size property of options input instead. To be deleted in v5.0. - */ - @Input() size: ModalSize = 'lg'; - @Input() get visible(): boolean { return this._visible; @@ -81,12 +67,6 @@ export class ModalComponent implements OnInit, OnDestroy, DismissableModal { @ContentChild(ButtonComponent, { static: false, read: ButtonComponent }) abpSubmit: ButtonComponent; - /** - * @deprecated will be removed in v5.0 - */ - @ContentChild('abpClose', { static: false, read: ElementRef }) - abpClose: ElementRef; - @Output() readonly visibleChange = new EventEmitter(); @Output() readonly init = new EventEmitter(); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html deleted file mode 100644 index a3a142cc01..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
                                                  - -
                                                  diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts deleted file mode 100644 index 439989ef73..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core'; - -/** - * @deprecated To be deleted in v5.0. Use ngx-datatale instead. - */ -@Component({ - selector: 'abp-sort-order-icon', - templateUrl: './sort-order-icon.component.html', -}) -export class SortOrderIconComponent { - private _order: 'asc' | 'desc' | ''; - private _selectedSortKey: string; - - @Input() - sortKey: string; - - @Input() - set selectedSortKey(value: string) { - this._selectedSortKey = value; - this.selectedSortKeyChange.emit(value); - } - get selectedSortKey(): string { - return this._selectedSortKey; - } - - @Input() - set order(value: 'asc' | 'desc' | '') { - this._order = value; - this.orderChange.emit(value); - } - get order(): 'asc' | 'desc' | '' { - return this._order; - } - - @Output() readonly orderChange = new EventEmitter(); - @Output() readonly selectedSortKeyChange = new EventEmitter(); - - @Input() - iconClass: string; - - get icon(): string { - if (this.selectedSortKey === this.sortKey) return `sorting_${this.order}`; - else return 'sorting'; - } - - sort(key: string) { - this.selectedSortKey = key; - switch (this.order) { - case '': - this.order = 'asc'; - this.orderChange.emit('asc'); - break; - case 'asc': - this.order = 'desc'; - this.orderChange.emit('desc'); - break; - case 'desc': - this.order = ''; - this.orderChange.emit(''); - break; - } - } -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts deleted file mode 100644 index d5e20cf568..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - // eslint-disable-next-line @angular-eslint/component-selector - selector: '[abp-table-empty-message]', - template: ` - - {{ emptyMessage | abpLocalization }} - - `, -}) -export class TableEmptyMessageComponent { - @Input() - colspan = 2; - - @Input() - message: string; - - @Input() - localizationResource = 'AbpAccount'; - - @Input() - localizationProp = 'NoDataAvailableInDatatable'; - - get emptyMessage(): string { - return this.message || `${this.localizationResource}::${this.localizationProp}`; - } -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html deleted file mode 100644 index 6cbea56304..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ /dev/null @@ -1,81 +0,0 @@ -
                                                  -
                                                  - -
                                                  - -
                                                  -
                                                  -
                                                  - - -
                                                  -
                                                  -
                                                  -
                                                  - - - - -
                                                  -
                                                  -
                                                  -
                                                  - - - -
                                                  -
                                                  -
                                                  -
                                                  - - - - - - -
                                                  -
                                                  - - - - - - - - - - - - - - - - - - - - {{ - emptyMessage | abpLocalization - }} - - diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss deleted file mode 100644 index 98d4eb5811..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss +++ /dev/null @@ -1,337 +0,0 @@ -.ui-table { - position: relative; - - .ui-table-tbody > tr:nth-child(even):hover, - .ui-table-tbody > tr:hover { - filter: brightness(90%); - } - - .ui-table-empty { - padding: 20px 0; - text-align: center; - border: 1px solid #e0e0e0; - border-top-width: 0; - } - - .ui-table-caption, - .ui-table-summary { - background-color: #f4f4f4; - color: #333333; - border: 1px solid #c8c8c8; - padding: 0.571em 1em; - text-align: center; - } - .ui-table-caption { - border-bottom: 0 none; - font-weight: 700; - } - .ui-table-summary { - border-top: 0 none; - font-weight: 700; - } - .ui-table-thead > tr > th { - padding: 0.571em 0.857em; - border: 1px solid #c8c8c8; - font-weight: 700; - color: #333333; - background-color: #f4f4f4; - } - .ui-table-tbody > tr > td { - padding: 0.571em 0.857em; - } - .ui-table-tfoot > tr > td { - padding: 0.571em 0.857em; - border: 1px solid #c8c8c8; - font-weight: 700; - color: #333333; - background-color: #ffffff; - } - .ui-sortable-column { - -moz-transition: box-shadow 0.2s; - -o-transition: box-shadow 0.2s; - -webkit-transition: box-shadow 0.2s; - transition: box-shadow 0.2s; - } - .ui-sortable-column:focus { - outline: 0 none; - outline-offset: 0; - -webkit-box-shadow: inset 0 0 0 0.2em #8dcdff; - -moz-box-shadow: inset 0 0 0 0.2em #8dcdff; - box-shadow: inset 0 0 0 0.2em #8dcdff; - } - .ui-sortable-column .ui-sortable-column-icon { - color: #848484; - } - .ui-sortable-column:not(.ui-state-highlight):hover { - background-color: #e0e0e0; - color: #333333; - } - .ui-sortable-column:not(.ui-state-highlight):hover .ui-sortable-column-icon { - color: #333333; - } - .ui-sortable-column.ui-state-highlight { - background-color: #007ad9; - color: #ffffff; - } - .ui-sortable-column.ui-state-highlight .ui-sortable-column-icon { - color: #ffffff; - } - .ui-editable-column input { - font-size: 14px; - font-family: 'Open Sans', 'Helvetica Neue', sans-serif; - } - .ui-editable-column input:focus { - outline: 1px solid #007ad9; - outline-offset: 2px; - } - .ui-table-tbody > tr { - background-color: #ffffff; - color: #333333; - } - .ui-table-tbody > tr > td { - background-color: inherit; - border: 1px solid #c8c8c8; - } - .ui-table-tbody > tr.ui-state-highlight { - background-color: #007ad9; - color: #ffffff; - } - .ui-table-tbody > tr.ui-state-highlight a { - color: #ffffff; - } - .ui-table-tbody > tr.ui-contextmenu-selected { - background-color: #007ad9; - color: #ffffff; - } - .ui-table-tbody > tr.ui-table-dragpoint-top > td { - -webkit-box-shadow: inset 0 2px 0 0 #007ad9; - -moz-box-shadow: inset 0 2px 0 0 #007ad9; - box-shadow: inset 0 2px 0 0 #007ad9; - } - .ui-table-tbody > tr.ui-table-dragpoint-bottom > td { - -webkit-box-shadow: inset 0 -2px 0 0 #007ad9; - -moz-box-shadow: inset 0 -2px 0 0 #007ad9; - box-shadow: inset 0 -2px 0 0 #007ad9; - } - .ui-table-tbody > tr:nth-child(even) { - background-color: #f9f9f9; - } - .ui-table-tbody > tr:nth-child(even).ui-state-highlight { - background-color: #007ad9; - color: #ffffff; - } - .ui-table-tbody > tr:nth-child(even).ui-state-highlight a { - color: #ffffff; - } - .ui-table-tbody > tr:nth-child(even).ui-contextmenu-selected { - background-color: #007ad9; - color: #ffffff; - } - - &.ui-table-hoverable-rows - .ui-table-tbody - > tr.ui-selectable-row:not(.ui-state-highlight):not(.ui-contextmenu-selected):hover { - cursor: pointer; - background-color: #eaeaea; - color: #333333; - } - .ui-column-resizer-helper { - background-color: #007ad9; - } - @media screen and (max-width: 40em) { - &.ui-table-responsive .ui-table-tbody > tr > td { - border: 0 none; - } - } - - table { - border-collapse: collapse; - width: 100%; - table-layout: fixed; - } - - .ui-table-tbody > tr > td, - .ui-table-tfoot > tr > td, - .ui-table-thead > tr > th { - padding: 0.571em 0.857em; - } - - .ui-sortable-column { - cursor: pointer; - } - - p-sorticon { - vertical-align: middle; - } - - .ui-table-auto-layout > .ui-table-wrapper { - overflow-x: auto; - } - - .ui-table-auto-layout > .ui-table-wrapper > table { - table-layout: auto; - } - - .ui-table-caption, - .ui-table-summary { - padding: 0.25em 0.5em; - text-align: center; - font-weight: 700; - } - - .ui-table-caption { - border-bottom: 0; - } - - .ui-table-summary { - border-top: 0; - } - - .ui-table-scrollable-wrapper { - position: relative; - } - - .ui-table-scrollable-footer, - .ui-table-scrollable-header { - overflow: hidden; - border: 0; - } - - .ui-table-scrollable-body { - overflow: auto; - position: relative; - } - - .ui-table-virtual-table { - position: absolute; - } - - .ui-table-loading-virtual-table { - display: none; - } - - .ui-table-frozen-view .ui-table-scrollable-body { - overflow: hidden; - } - - .ui-table-frozen-view > .ui-table-scrollable-body > table > .ui-table-tbody > tr > td:last-child { - border-right: 0; - } - - .ui-table-unfrozen-view { - position: absolute; - top: 0; - } - - .ui-table-resizable > .ui-table-wrapper { - overflow-x: auto; - } - - .ui-table-resizable .ui-table-tbody > tr > td, - .ui-table-resizable .ui-table-tfoot > tr > td, - .ui-table-resizable .ui-table-thead > tr > th { - overflow: hidden; - } - - .ui-table-resizable .ui-resizable-column { - background-clip: padding-box; - position: relative; - } - - .ui-table-resizable-fit .ui-resizable-column:last-child .ui-column-resizer { - display: none; - } - - .ui-column-resizer { - display: block; - position: absolute !important; - top: 0; - right: 0; - margin: 0; - width: 0.5em; - height: 100%; - padding: 0; - cursor: col-resize; - border: 1px solid rgba(0, 0, 0, 0); - } - - .ui-column-resizer-helper { - width: 1px; - position: absolute; - z-index: 10; - display: none; - } - - .ui-table-tbody > tr > td.ui-editing-cell { - padding: 0; - } - - .ui-table-tbody > tr > td.ui-editing-cell p-celleditor > * { - width: 100%; - } - - .ui-table-reorder-indicator-down, - .ui-table-reorder-indicator-up { - position: absolute; - display: none; - } - - .ui-table-responsive .ui-table-tbody > tr > td .ui-column-title { - display: none; - } - - @media screen and (max-width: 40em) { - .ui-table-responsive .ui-table-tfoot > tr > td, - .ui-table-responsive .ui-table-thead > tr > th, - .ui-table-responsive colgroup { - display: none !important; - } - .ui-table-responsive .ui-table-tbody > tr > td { - text-align: left; - display: block; - border: 0; - width: 100% !important; - box-sizing: border-box; - float: left; - clear: left; - } - .ui-table-responsive .ui-table-tbody > tr > td .ui-column-title { - padding: 0.4em; - min-width: 30%; - display: inline-block; - margin: -0.4em 1em -0.4em -0.4em; - font-weight: 700; - } - } - - .ui-widget { - font-family: 'Open Sans', 'Helvetica Neue', sans-serif; - font-size: 14px; - text-decoration: none; - } - - .page-item.disabled .page-link, - .page-link { - background-color: transparent; - border: none; - } - - .page-item.disabled .page-link { - box-shadow: none; - } - - .pagination { - margin-bottom: 0; - } - - .pagination-wrapper { - display: flex; - justify-content: center; - border-top: 0; - padding: 0; - } - - .op-0 { - opacity: 0; - } -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts deleted file mode 100644 index 0baf78f883..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { - Component, - ElementRef, - EventEmitter, - Input, - OnInit, - Output, - TemplateRef, - TrackByFunction, - ViewChild, - ViewEncapsulation, -} from '@angular/core'; - -/** - * - * @deprecated To be deleted in v5.0. Use ngx-datatale instead. - */ -@Component({ - selector: 'abp-table', - templateUrl: 'table.component.html', - styleUrls: ['table.component.scss'], - encapsulation: ViewEncapsulation.None, -}) -export class TableComponent implements OnInit { - private _totalRecords: number; - bodyScrollLeft = 0; - - @Input() - value: any[]; - - @Input() - headerTemplate: TemplateRef; - - @Input() - bodyTemplate: TemplateRef; - - @Input() - colgroupTemplate: TemplateRef; - - @Input() - scrollHeight: string; - - @Input() - scrollable: boolean; - - @Input() - rows: number; - - @Input() - page = 1; - - @Input() - trackingProp = 'id'; - - @Input() - emptyMessage = 'AbpAccount::NoDataAvailableInDatatable'; - - @Output() - readonly pageChange = new EventEmitter(); - - @ViewChild('wrapper', { read: ElementRef }) - wrapperRef: ElementRef; - - @Input() - get totalRecords(): number { - return this._totalRecords || this.value.length; - } - set totalRecords(newValue: number) { - if (newValue < 0) this._totalRecords = 0; - - this._totalRecords = newValue; - } - - get totalPages(): number { - if (!this.rows) { - return; - } - - return Math.ceil(this.totalRecords / this.rows); - } - - get slicedValue(): any[] { - if (!this.rows || this.rows >= this.value.length) { - return this.value; - } - - const start = (this.page - 1) * this.rows; - return this.value.slice(start, start + this.rows); - } - - marginCalculator: MarginCalculator; - - trackByFn: TrackByFunction = (_, value) => { - return typeof value === 'object' ? value[this.trackingProp] || value : value; - }; - - ngOnInit() { - this.marginCalculator = document.body.dir === 'rtl' ? rtlCalculator : ltrCalculator; - } -} - -function ltrCalculator(div: HTMLDivElement): string { - return `0 auto 0 -${div.scrollLeft}px`; -} - -function rtlCalculator(div: HTMLDivElement): string { - return `0 ${-(div.scrollWidth - div.clientWidth - div.scrollLeft)}px 0 auto`; -} - -type MarginCalculator = (div: HTMLDivElement) => string; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts index 64b849d4fe..b0a79877fe 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts @@ -1,5 +1,4 @@ +export * from './ellipsis.directive'; export * from './loading.directive'; export * from './ngx-datatable-default.directive'; export * from './ngx-datatable-list.directive'; -export * from './table-sort.directive'; -export * from './ellipsis.directive'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts deleted file mode 100644 index 90e8b5e6e1..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { SortOrder, SortPipe } from '@abp/ng.core'; -import { - ChangeDetectorRef, - Directive, - Host, - Input, - OnChanges, - Optional, - Self, - SimpleChanges, -} from '@angular/core'; -import clone from 'just-clone'; -import { TableComponent } from '../components/table/table.component'; - -export interface TableSortOptions { - key: string; - order: SortOrder; -} - -/** - * - * @deprecated To be deleted in v5.0 - */ -@Directive({ - selector: '[abpTableSort]', - providers: [SortPipe], -}) -export class TableSortDirective implements OnChanges { - @Input() - abpTableSort: TableSortOptions; - - @Input() - value: any[] = []; - - get table(): TableComponent | any { - return ( - this.abpTable || this.cdRef['_view'].component || this.cdRef['context'] // 'context' for ivy - ); - } - - constructor( - @Host() @Optional() @Self() private abpTable: TableComponent, - private sortPipe: SortPipe, - private cdRef: ChangeDetectorRef, - ) {} - - ngOnChanges({ value, abpTableSort }: SimpleChanges) { - if (this.table && (value || abpTableSort)) { - this.abpTableSort = this.abpTableSort || ({} as TableSortOptions); - this.table.value = this.sortPipe.transform( - clone(this.value), - this.abpTableSort.order, - this.abpTableSort.key, - ); - } - } -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/index.ts index 1b39fcc0f0..5b97363917 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/index.ts @@ -1,5 +1,4 @@ export * from './confirmation.service'; -export * from './modal.service'; -export * from './toaster.service'; export * from './nav-items.service'; export * from './page-alert.service'; +export * from './toaster.service'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/modal.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/modal.service.ts deleted file mode 100644 index a75cfe5089..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/modal.service.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ContentProjectionService, PROJECTION_STRATEGY } from '@abp/ng.core'; -import { ComponentRef, Injectable, TemplateRef, ViewContainerRef, OnDestroy } from '@angular/core'; -import { ModalContainerComponent } from '../components/modal/modal-container.component'; - -/** - * @deprecated Use ng-bootstrap modal. To be deleted in v5.0. - */ -@Injectable({ - providedIn: 'root', -}) -export class ModalService implements OnDestroy { - private containerComponentRef: ComponentRef; - - constructor(private contentProjectionService: ContentProjectionService) { - this.setContainer(); - } - - private setContainer() { - this.containerComponentRef = this.contentProjectionService.projectContent( - PROJECTION_STRATEGY.AppendComponentToBody(ModalContainerComponent), - ); - - this.containerComponentRef.changeDetectorRef.detectChanges(); - } - - clearModal() { - this.getContainer().clear(); - this.detectChanges(); - } - - detectChanges() { - this.containerComponentRef.changeDetectorRef.detectChanges(); - } - - getContainer(): ViewContainerRef { - return this.containerComponentRef.instance.container; - } - - renderTemplate(template: TemplateRef, context?: T) { - const containerRef = this.getContainer(); - - const strategy = PROJECTION_STRATEGY.ProjectTemplateToContainer( - template, - containerRef, - context, - ); - - this.contentProjectionService.projectContent(strategy); - } - - ngOnDestroy() { - this.containerComponentRef.destroy(); - } -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 8a9b6ed201..8575e834ed 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -17,11 +17,7 @@ import { HttpErrorWrapperComponent } from './components/http-error-wrapper/http- import { LoaderBarComponent } from './components/loader-bar/loader-bar.component'; import { LoadingComponent } from './components/loading/loading.component'; import { ModalCloseDirective } from './components/modal/modal-close.directive'; -import { ModalContainerComponent } from './components/modal/modal-container.component'; import { ModalComponent } from './components/modal/modal.component'; -import { SortOrderIconComponent } from './components/sort-order-icon/sort-order-icon.component'; -import { TableEmptyMessageComponent } from './components/table-empty-message/table-empty-message.component'; -import { TableComponent } from './components/table/table.component'; import { ToastContainerComponent } from './components/toast-container/toast-container.component'; import { ToastComponent } from './components/toast/toast.component'; import { DEFAULT_VALIDATION_BLUEPRINTS } from './constants/validation'; @@ -29,7 +25,6 @@ import { EllipsisModule } from './directives/ellipsis.directive'; import { LoadingDirective } from './directives/loading.directive'; import { NgxDatatableDefaultDirective } from './directives/ngx-datatable-default.directive'; import { NgxDatatableListDirective } from './directives/ngx-datatable-list.directive'; -import { TableSortDirective } from './directives/table-sort.directive'; import { ErrorHandler } from './handlers/error.handler'; import { initLazyStyleHandler } from './handlers/lazy-style.handler'; import { RootParams } from './models/common'; @@ -46,15 +41,11 @@ const declarationsWithExports = [ LoaderBarComponent, LoadingComponent, ModalComponent, - TableComponent, - TableEmptyMessageComponent, ToastComponent, ToastContainerComponent, - SortOrderIconComponent, NgxDatatableDefaultDirective, NgxDatatableListDirective, LoadingDirective, - TableSortDirective, ModalCloseDirective, ]; @@ -66,13 +57,12 @@ const declarationsWithExports = [ NgbPaginationModule, EllipsisModule, ], - declarations: [...declarationsWithExports, HttpErrorWrapperComponent, ModalContainerComponent], + declarations: [...declarationsWithExports, HttpErrorWrapperComponent], exports: [NgxDatatableModule, EllipsisModule, ...declarationsWithExports], providers: [DatePipe], entryComponents: [ HttpErrorWrapperComponent, LoadingComponent, - ModalContainerComponent, ToastContainerComponent, ConfirmationComponent, ], From 0e11eebd28f278c8ef9edc7dfed3f75a7d58be09 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 22 Sep 2021 14:38:56 +0300 Subject: [PATCH 15/42] fix some errors --- .../src/lib/tenant-box.service.ts | 8 +++---- .../packages/core/src/lib/utils/date-utils.ts | 1 - .../packages/core/src/lib/utils/index.ts | 1 - .../packages/core/src/lib/utils/rxjs-utils.ts | 3 --- .../lib/components/modal/modal.component.ts | 24 +++---------------- 5 files changed, 6 insertions(+), 31 deletions(-) delete mode 100644 npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts diff --git a/npm/ng-packs/packages/account-core/src/lib/tenant-box.service.ts b/npm/ng-packs/packages/account-core/src/lib/tenant-box.service.ts index ef0a71a245..d8212b39e8 100644 --- a/npm/ng-packs/packages/account-core/src/lib/tenant-box.service.ts +++ b/npm/ng-packs/packages/account-core/src/lib/tenant-box.service.ts @@ -1,12 +1,11 @@ -import { Injectable } from '@angular/core'; -import { ToasterService } from '@abp/ng.theme.shared'; import { - AbpApplicationConfigurationService, AbpTenantService, ConfigStateService, CurrentTenantDto, SessionStateService, } from '@abp/ng.core'; +import { ToasterService } from '@abp/ng.theme.shared'; +import { Injectable } from '@angular/core'; import { finalize } from 'rxjs/operators'; @Injectable() @@ -24,7 +23,6 @@ export class TenantBoxService { private tenantService: AbpTenantService, private sessionState: SessionStateService, private configState: ConfigStateService, - private appConfigService: AbpApplicationConfigurationService, ) {} onSwitch() { @@ -57,7 +55,7 @@ export class TenantBoxService { private setTenant(tenant: CurrentTenantDto) { this.sessionState.setTenant(tenant); - this.appConfigService.get().subscribe(res => this.configState.setState(res)); + this.configState.refreshAppState(); } private showError() { diff --git a/npm/ng-packs/packages/core/src/lib/utils/date-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/date-utils.ts index 6c4793f895..2144bf69a1 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/date-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/date-utils.ts @@ -1,4 +1,3 @@ -import { ApplicationConfiguration } from '../models/application-configuration'; import { DateTimeFormatDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; import { ConfigStateService } from '../services'; diff --git a/npm/ng-packs/packages/core/src/lib/utils/index.ts b/npm/ng-packs/packages/core/src/lib/utils/index.ts index e7fe63deb0..56378f664f 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/index.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/index.ts @@ -16,6 +16,5 @@ export * from './multi-tenancy-utils'; export * from './number-utils'; export * from './object-utils'; export * from './route-utils'; -export * from './rxjs-utils'; export * from './string-utils'; export * from './tree-utils'; diff --git a/npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts deleted file mode 100644 index 9d81d523cb..0000000000 --- a/npm/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts +++ /dev/null @@ -1,3 +0,0 @@ -function isFunction(value) { - return typeof value === 'function'; -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index 44e077160b..008a2c3e9b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -5,7 +5,6 @@ import { EventEmitter, Inject, Input, - isDevMode, OnDestroy, OnInit, Optional, @@ -144,9 +143,8 @@ export class ModalComponent implements OnInit, OnDestroy, DismissableModal { setTimeout(() => this.listen(), 0); this.modalRef = this.modal.open(this.modalContent, { - // TODO: set size to 'lg' when removed the size variable - size: this.size, - centered: this.centered, + size: 'lg', + centered: true, keyboard: false, scrollable: true, beforeDismiss: () => { @@ -156,7 +154,7 @@ export class ModalComponent implements OnInit, OnDestroy, DismissableModal { return !this.visible; }, ...this.options, - windowClass: `${this.modalClass} ${this.options.windowClass || ''} ${this.modalIdentifier}`, + windowClass: `${this.options.windowClass || ''} ${this.modalIdentifier}`, }); this.appear.emit(); @@ -212,22 +210,6 @@ export class ModalComponent implements OnInit, OnDestroy, DismissableModal { } }); - setTimeout(() => { - if (!this.abpClose) return; - this.warnForDeprecatedClose(); - fromEvent(this.abpClose.nativeElement, 'click') - .pipe(takeUntil(this.destroy$)) - .subscribe(() => this.close()); - }, 0); - this.init.emit(); } - - private warnForDeprecatedClose() { - if (isDevMode()) { - console.warn( - 'Please use abpClose directive instead of #abpClose template variable. #abpClose will be removed in v5.0', - ); - } - } } From c7efcb3ccc40f5924195ee16f52719f675afc3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Wed, 22 Sep 2021 15:46:52 +0300 Subject: [PATCH 16/42] Update PermissionManagementModal.cshtml --- .../AbpPermissionManagement/PermissionManagementModal.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml index 62c3a286fc..c5dfed0c20 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml @@ -24,7 +24,7 @@

                                                  @group.DisplayName


                                                  -
                                                  +
                                                  Date: Wed, 22 Sep 2021 16:56:07 +0300 Subject: [PATCH 17/42] Update Oracle package to v5.21.3 --- .../Volo.Abp.EntityFrameworkCore.Oracle.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj index 2cfa2fb199..de80c88e03 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj @@ -18,8 +18,8 @@ - - + + From 6e87e155ded0396ac3f5a444b04c932a9a545fd9 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 22 Sep 2021 17:25:32 +0300 Subject: [PATCH 18/42] fix testing errors --- .../application-configuration.service.spec.ts | 27 ---- .../lib/tests/config-state.service.spec.ts | 12 +- .../lib/tests/localization.service.spec.ts | 29 ++-- .../lib/tests/permission.directive.spec.ts | 2 +- .../lib/tests/visibility.directive.spec.ts | 126 ------------------ .../suppress-unsaved-changes-warning.token.ts | 1 - npm/ng-packs/scripts/prod-build.ts | 9 -- 7 files changed, 29 insertions(+), 177 deletions(-) delete mode 100644 npm/ng-packs/packages/core/src/lib/tests/application-configuration.service.spec.ts delete mode 100644 npm/ng-packs/packages/core/src/lib/tests/visibility.directive.spec.ts diff --git a/npm/ng-packs/packages/core/src/lib/tests/application-configuration.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/application-configuration.service.spec.ts deleted file mode 100644 index 43b6218697..0000000000 --- a/npm/ng-packs/packages/core/src/lib/tests/application-configuration.service.spec.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; -import { of } from 'rxjs'; -import { ApplicationConfigurationService, RestService } from '../services'; - -describe('ApplicationConfigurationService', () => { - let spectator: SpectatorService; - const createService = createServiceFactory({ - service: ApplicationConfigurationService, - mocks: [RestService], - }); - - beforeEach(() => (spectator = createService())); - - it('should send a GET to application-configuration API', () => { - const rest = spectator.inject(RestService); - - const requestSpy = jest.spyOn(rest, 'request'); - requestSpy.mockReturnValue(of(null)); - - spectator.service.getConfiguration().subscribe(); - - expect(requestSpy).toHaveBeenCalledWith( - { method: 'GET', url: '/api/abp/application-configuration' }, - {}, - ); - }); -}); diff --git a/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts index a123f65ae3..3dc1b45732 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts @@ -1,5 +1,7 @@ import { HttpClientTestingModule } from '@angular/common/http/testing'; import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { of } from 'rxjs'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; import { ApplicationConfigurationDto, CurrentUserDto, @@ -107,14 +109,20 @@ describe('ConfigStateService', () => { const createService = createServiceFactory({ service: ConfigStateService, imports: [HttpClientTestingModule], - providers: [{ provide: CORE_OPTIONS, useValue: { skipGetAppConfiguration: true } }], + providers: [ + { provide: CORE_OPTIONS, useValue: { skipGetAppConfiguration: true } }, + { + provide: AbpApplicationConfigurationService, + useValue: { get: () => of(CONFIG_STATE_DATA) }, + }, + ], }); beforeEach(() => { spectator = createService(); configState = spectator.service; - configState.setState(CONFIG_STATE_DATA); + configState.refreshAppState(); }); describe('#getAll', () => { diff --git a/npm/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts index c8d89f54e4..b531b1bf23 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts @@ -1,13 +1,15 @@ import { Injector } from '@angular/core'; import { Router } from '@angular/router'; import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; -import { of } from 'rxjs'; +import { BehaviorSubject } from 'rxjs'; import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; import { ConfigStateService, SessionStateService } from '../services'; import { LocalizationService } from '../services/localization.service'; import { CORE_OPTIONS } from '../tokens/options.token'; import { CONFIG_STATE_DATA } from './config-state.service.spec'; +const appConfigData$ = new BehaviorSubject(CONFIG_STATE_DATA); + describe('LocalizationService', () => { let spectator: SpectatorService; let sessionState: SpyObject; @@ -25,7 +27,7 @@ describe('LocalizationService', () => { }, { provide: AbpApplicationConfigurationService, - useValue: { get: () => of(CONFIG_STATE_DATA) }, + useValue: { get: () => appConfigData$ }, }, ], }); @@ -36,8 +38,9 @@ describe('LocalizationService', () => { configState = spectator.inject(ConfigStateService); service = spectator.service; - configState.setState(CONFIG_STATE_DATA); + configState.refreshAppState(); sessionState.setLanguage('tr'); + appConfigData$.next(CONFIG_STATE_DATA); }); describe('#currentLang', () => { @@ -108,12 +111,13 @@ describe('LocalizationService', () => { `( 'should return observable $expected when resource name is $resource and key is $key', async ({ resource, key, defaultValue, expected }) => { - configState.setState({ + appConfigData$.next({ localization: { values: { foo: { bar: 'baz' }, x: { y: 'z' } }, defaultResourceName: 'x', }, - }); + } as any); + configState.refreshAppState(); service.localize(resource, key, defaultValue).subscribe(result => { expect(result).toBe(expected); @@ -149,12 +153,13 @@ describe('LocalizationService', () => { `( 'should return $expected when resource name is $resource and key is $key', ({ resource, key, defaultValue, expected }) => { - configState.setState({ + appConfigData$.next({ localization: { values: { foo: { bar: 'baz' }, x: { y: 'z' } }, defaultResourceName: 'x', }, - }); + } as any); + configState.refreshAppState(); const result = service.localizeSync(resource, key, defaultValue); @@ -195,12 +200,13 @@ describe('LocalizationService', () => { `( 'should return observable $expected when resource names are $resources and keys are $keys', async ({ resources, keys, defaultValue, expected }) => { - configState.setState({ + appConfigData$.next({ localization: { values: { foo: { bar: 'baz' }, x: { y: 'z' } }, defaultResourceName: 'x', }, - }); + } as any); + configState.refreshAppState(); service.localizeWithFallback(resources, keys, defaultValue).subscribe(result => { expect(result).toBe(expected); @@ -241,12 +247,13 @@ describe('LocalizationService', () => { `( 'should return $expected when resource names are $resources and keys are $keys', ({ resources, keys, defaultValue, expected }) => { - configState.setState({ + appConfigData$.next({ localization: { values: { foo: { bar: 'baz' }, x: { y: 'z' } }, defaultResourceName: 'x', }, - }); + } as any); + configState.refreshAppState(); const result = service.localizeWithFallbackSync(resources, keys, defaultValue); diff --git a/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts index 7b65a4a9db..d465a60fa3 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts @@ -17,7 +17,7 @@ describe('PermissionDirective', () => { describe('with condition', () => { beforeEach(() => { spectator = createDirective( - `
                                                  Testing Permission Directive
                                                  `, + `
                                                  Testing Permission Directive
                                                  `, ); directive = spectator.directive; }); diff --git a/npm/ng-packs/packages/core/src/lib/tests/visibility.directive.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/visibility.directive.spec.ts deleted file mode 100644 index 04c217eed5..0000000000 --- a/npm/ng-packs/packages/core/src/lib/tests/visibility.directive.spec.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; -import { VisibilityDirective } from '../directives/visibility.directive'; - -describe('VisibilityDirective', () => { - let spectator: SpectatorDirective; - let directive: VisibilityDirective; - const createDirective = createDirectiveFactory({ - directive: VisibilityDirective, - }); - - describe('without content', () => { - beforeEach(() => { - spectator = createDirective('
                                                  '); - directive = spectator.directive; - }); - - it('should be created', () => { - expect(directive).toBeTruthy(); - }); - - xit('should be removed', done => { - setTimeout(() => { - expect(spectator.query('div')).toBeFalsy(); - done(); - }, 0); - }); - }); - - describe('without mutation observer and with content', () => { - beforeEach(() => { - spectator = createDirective('

                                                  Content

                                                  '); - directive = spectator.directive; - }); - - it('should not removed', done => { - setTimeout(() => { - expect(spectator.query('div')).toBeTruthy(); - done(); - }, 0); - }); - }); - - describe('without mutation observer and with focused element', () => { - beforeEach(() => { - spectator = createDirective( - '

                                                  Content

                                                  ', - ); - directive = spectator.directive; - }); - - it('should not removed', done => { - setTimeout(() => { - expect(spectator.query('#main')).toBeTruthy(); - done(); - }, 0); - }); - }); - - describe('without content and with focused element', () => { - beforeEach(() => { - spectator = createDirective( - '
                                                  ', - ); - directive = spectator.directive; - }); - - xit('should be removed', done => { - setTimeout(() => { - expect(spectator.query('#main')).toBeFalsy(); - done(); - }, 0); - }); - }); - - describe('with mutation observer and with content', () => { - beforeEach(() => { - spectator = createDirective('
                                                  Content
                                                  '); - directive = spectator.directive; - }); - - xit('should remove the main div element when content removed', done => { - spectator.query('#content').remove(); - - setTimeout(() => { - expect(spectator.query('div')).toBeFalsy(); - done(); - }, 0); - }); - - it('should not remove the main div element', done => { - spectator.query('div').appendChild(document.createElement('div')); - - setTimeout(() => { - expect(spectator.query('div')).toBeTruthy(); - done(); - }, 100); - }); - }); - - describe('with mutation observer and with focused element', () => { - beforeEach(() => { - spectator = createDirective( - '

                                                  Content

                                                  ', - ); - directive = spectator.directive; - }); - - xit('should remove the main div element when content removed', done => { - spectator.query('#content').remove(); - - setTimeout(() => { - expect(spectator.query('#main')).toBeFalsy(); - done(); - }, 0); - }); - - it('should not remove the main div element', done => { - spectator.query('#content').appendChild(document.createElement('div')); - - setTimeout(() => { - expect(spectator.query('#main')).toBeTruthy(); - done(); - }, 100); - }); - }); -}); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts index af68c8130c..b76a18706c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts @@ -1,6 +1,5 @@ import { InjectionToken } from '@angular/core'; -// TODO: Should be documented export const SUPPRESS_UNSAVED_CHANGES_WARNING = new InjectionToken( 'SUPPRESS_UNSAVED_CHANGES_WARNING', ); diff --git a/npm/ng-packs/scripts/prod-build.ts b/npm/ng-packs/scripts/prod-build.ts index 33f2aa2c44..2f189020f4 100644 --- a/npm/ng-packs/scripts/prod-build.ts +++ b/npm/ng-packs/scripts/prod-build.ts @@ -17,15 +17,6 @@ import fse from 'fs-extra'; overwrite: true, }); - // TODO: Will be removed in v3.1, it is added to fix the prod build error - await fse.copy( - '../node_modules/@swimlane', - '../../../templates/app/angular/node_modules/@swimlane', - { - overwrite: true, - }, - ); - await execa('yarn', ['ng', 'build', '--prod'], { stdout: 'inherit', cwd: '../../../templates/app/angular', From 9820a9a12c6a907dc2b56f707379c2f215ef3f83 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 22 Sep 2021 22:29:58 +0800 Subject: [PATCH 19/42] Update Volo.Abp.EntityFrameworkCore.Oracle.csproj --- .../Volo.Abp.EntityFrameworkCore.Oracle.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj index de80c88e03..ee4483fd91 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj @@ -19,7 +19,7 @@
                                                  - + From 6e106d53c1338cb08b98b34e80d919aeda37f893 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 23 Sep 2021 09:30:18 +0800 Subject: [PATCH 20/42] Call `SetConcurrencyStampIfNotNull` before save changes. --- .../Volo/Abp/Identity/ProfileAppService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs index cdc96d92aa..c722a43904 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs @@ -39,6 +39,8 @@ namespace Volo.Abp.Identity var user = await UserManager.GetByIdAsync(CurrentUser.GetId()); + user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + if (!string.Equals(user.UserName, input.UserName, StringComparison.InvariantCultureIgnoreCase)) { if (await SettingProvider.IsTrueAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled)) @@ -63,8 +65,6 @@ namespace Volo.Abp.Identity user.Name = input.Name; user.Surname = input.Surname; - user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); - input.MapExtraPropertiesTo(user); (await UserManager.UpdateAsync(user)).CheckErrors(); From a9aeeba4a4f749f1cbd6c28a5a198b36111b573f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 23 Sep 2021 10:24:28 +0800 Subject: [PATCH 21/42] Add ProfileManagementScriptBundleContributor --- ...ntProfilePasswordManagementGroupViewComponent.cs | 4 ++++ ...ofilePersonalInfoManagementGroupViewComponent.cs | 4 ++++ .../ProfileManagementScriptBundleContributor.cs | 13 +++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs index 7a0df6878b..1c4a0c9936 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs @@ -2,12 +2,16 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.Abp.Auditing; using Volo.Abp.Identity; using Volo.Abp.Validation; namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.Password { + [Widget( + ScriptTypes = new[] { typeof(ProfileManagementScriptBundleContributor) } + )] public class AccountProfilePasswordManagementGroupViewComponent : AbpViewComponent { private readonly IProfileAppService _profileAppService; diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs index 7b86f8f3fd..d199f32625 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs @@ -2,12 +2,16 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.Abp.Domain.Entities; using Volo.Abp.Identity; using Volo.Abp.Validation; namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.PersonalInfo { + [Widget( + ScriptTypes = new[] { typeof(ProfileManagementScriptBundleContributor) } + )] public class AccountProfilePersonalInfoManagementGroupViewComponent : AbpViewComponent { private readonly IProfileAppService _profileAppService; diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs new file mode 100644 index 0000000000..54a47c84be --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup +{ + public class ProfileManagementScriptBundleContributor: BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("/client-proxies/identity-proxy.js"); + } + } +} From a1bb05608a3a9ea3f7f94a7be707458ef83edb16 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 23 Sep 2021 13:48:33 +0800 Subject: [PATCH 22/42] Add static proxy file to module template --- ...nyName.MyProjectName.IdentityServer.csproj | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + ...mpanyName.MyProjectName.Web.Unified.csproj | 6 +++ .../MyProjectNameWebUnifiedModule.cs | 7 +++ .../MyProjectName-generate-proxy.json | 53 +++++++++++++++++++ .../SampleClientProxy.Generated.cs | 28 ++++++++++ .../ClientProxies/SampleClientProxy.cs | 8 +++ .../MyProjectNameHttpApiClientModule.cs | 2 +- .../Samples/SampleController.cs | 1 + .../Pages/MyProjectName/Index.cshtml | 8 +++ .../client-proxies/MyProjectName-proxy.js | 32 +++++++++++ 11 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/MyProjectName-generate-proxy.json create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.Generated.cs create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.cs create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/client-proxies/MyProjectName-proxy.js diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index 6921ac3af0..be6c316292 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -28,6 +28,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 447c4e979a..de70793f38 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -52,6 +52,7 @@ namespace MyCompanyName.MyProjectName [DependsOn( typeof(AbpAccountWebIdentityServerModule), typeof(AbpAccountApplicationModule), + typeof(AbpAccountHttpApiModule), typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj index fa9eb63367..6e8d37e963 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj @@ -24,23 +24,29 @@ + + + + + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index d4b6d3f310..3a7217743a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -29,6 +29,7 @@ using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.HttpApi; using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; @@ -43,24 +44,30 @@ namespace MyCompanyName.MyProjectName [DependsOn( typeof(MyProjectNameWebModule), typeof(MyProjectNameApplicationModule), + typeof(MyProjectNameHttpApiModule), typeof(MyProjectNameEntityFrameworkCoreModule), typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpAutofacModule), typeof(AbpAccountWebModule), typeof(AbpAccountApplicationModule), + typeof(AbpAccountHttpApiModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementApplicationModule), + typeof(AbpPermissionManagementHttpApiModule), typeof(AbpIdentityWebModule), typeof(AbpIdentityApplicationModule), + typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpFeatureManagementWebModule), typeof(AbpFeatureManagementApplicationModule), + typeof(AbpFeatureManagementHttpApiModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementApplicationModule), + typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreSerilogModule), diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/MyProjectName-generate-proxy.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/MyProjectName-generate-proxy.json new file mode 100644 index 0000000000..0c806b2f57 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/MyProjectName-generate-proxy.json @@ -0,0 +1,53 @@ +{ + "modules": { + "MyProjectName": { + "rootPath": "MyProjectName", + "remoteServiceName": "MyProjectName", + "controllers": { + "MyCompanyName.MyProjectName.Samples.SampleController": { + "controllerName": "Sample", + "controllerGroupName": "Sample", + "type": "MyCompanyName.MyProjectName.Samples.SampleController", + "interfaces": [ + { + "type": "MyCompanyName.MyProjectName.Samples.ISampleAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/MyProjectName/sample", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "MyCompanyName.MyProjectName.Samples.SampleDto", + "typeSimple": "MyCompanyName.MyProjectName.Samples.SampleDto" + }, + "allowAnonymous": null, + "implementFrom": "MyCompanyName.MyProjectName.Samples.ISampleAppService" + }, + "GetAuthorizedAsync": { + "uniqueName": "GetAuthorizedAsync", + "name": "GetAuthorizedAsync", + "httpMethod": "GET", + "url": "api/MyProjectName/sample/authorized", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "MyCompanyName.MyProjectName.Samples.SampleDto", + "typeSimple": "MyCompanyName.MyProjectName.Samples.SampleDto" + }, + "allowAnonymous": false, + "implementFrom": "MyCompanyName.MyProjectName.Samples.ISampleAppService" + } + } + } + } + } + }, + "types": {} +} \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.Generated.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.Generated.cs new file mode 100644 index 0000000000..e73241ee35 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.Generated.cs @@ -0,0 +1,28 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Modeling; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.ClientProxying; +using MyCompanyName.MyProjectName.Samples; + +// ReSharper disable once CheckNamespace +namespace MyCompanyName.MyProjectName.Samples.ClientProxies +{ + [Dependency(ReplaceServices = true)] + [ExposeServices(typeof(ISampleAppService), typeof(SampleClientProxy))] + public partial class SampleClientProxy : ClientProxyBase, ISampleAppService + { + public virtual async Task GetAsync() + { + return await RequestAsync(nameof(GetAsync)); + } + + public virtual async Task GetAuthorizedAsync() + { + return await RequestAsync(nameof(GetAuthorizedAsync)); + } + } +} diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.cs new file mode 100644 index 0000000000..b8b7874053 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/ClientProxies/SampleClientProxy.cs @@ -0,0 +1,8 @@ +// This file is part of SampleClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace MyCompanyName.MyProjectName.Samples.ClientProxies +{ + public partial class SampleClientProxy + { + } +} diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs index ecf17f49e4..12929adf06 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs @@ -12,7 +12,7 @@ namespace MyCompanyName.MyProjectName { public override void ConfigureServices(ServiceConfigurationContext context) { - context.Services.AddHttpClientProxies( + context.Services.AddStaticHttpClientProxies( typeof(MyProjectNameApplicationContractsModule).Assembly, MyProjectNameRemoteServiceConsts.RemoteServiceName ); diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Samples/SampleController.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Samples/SampleController.cs index 9d4ef179c9..3d868495b9 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Samples/SampleController.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Samples/SampleController.cs @@ -5,6 +5,7 @@ using Volo.Abp; namespace MyCompanyName.MyProjectName.Samples { + [Area("MyProjectName")] [RemoteService(Name = MyProjectNameRemoteServiceConsts.RemoteServiceName)] [Route("api/MyProjectName/sample")] public class SampleController : MyProjectNameController, ISampleAppService diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml index 5807d89d9a..20fecbff87 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml @@ -1,8 +1,16 @@ @page @using Microsoft.Extensions.Localization @using MyCompanyName.MyProjectName.Localization +@using MyCompanyName.MyProjectName.Web.Pages.MyProjectName @model MyCompanyName.MyProjectName.Web.Pages.MyProjectName.IndexModel @inject IStringLocalizer L + +@section scripts { + + + +} + @{ }

                                                  MyProjectName

                                                  diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/client-proxies/MyProjectName-proxy.js b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/client-proxies/MyProjectName-proxy.js new file mode 100644 index 0000000000..563b98a3f9 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/client-proxies/MyProjectName-proxy.js @@ -0,0 +1,32 @@ +/* This file is automatically generated by ABP framework to use MVC Controllers from javascript. */ + + +// module myProjectName + +(function(){ + + // controller myCompanyName.myProjectName.samples.sample + + (function(){ + + abp.utils.createNamespace(window, 'myCompanyName.myProjectName.samples.sample'); + + myCompanyName.myProjectName.samples.sample.get = function(ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/MyProjectName/sample', + type: 'GET' + }, ajaxParams)); + }; + + myCompanyName.myProjectName.samples.sample.getAuthorized = function(ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/MyProjectName/sample/authorized', + type: 'GET' + }, ajaxParams)); + }; + + })(); + +})(); + + From b163ab9e7612eefd456ad8530e06fc3a6d8b4826 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 23 Sep 2021 14:22:48 +0800 Subject: [PATCH 23/42] Check API description. --- .../Abp/Http/Client/ClientProxying/ClientProxyBase.cs | 4 ++++ .../Http/Client/ClientProxying/ClientProxyUrlBuilder.cs | 8 -------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index b547ca256c..e45176393b 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -52,6 +52,10 @@ namespace Volo.Abp.Http.Client.ClientProxying { var methodUniqueName = $"{typeof(TService).FullName}.{methodName}.{string.Join("-", arguments.Select(x => x.GetType().FullName))}"; var action = ClientProxyApiDescriptionFinder.FindAction(methodUniqueName); + if (action == null) + { + throw new AbpException($"The API description of the {typeof(TService).FullName}.{methodName} method was not found!"); + } return new ClientProxyRequestContext( action, action.Parameters diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs index 464ca3f26d..e6a9b8ff71 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs @@ -5,7 +5,6 @@ using System.Globalization; using System.Linq; using System.Text; using JetBrains.Annotations; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.Proxying; using Volo.Abp.Http.Modeling; @@ -16,13 +15,6 @@ namespace Volo.Abp.Http.Client.ClientProxying { public class ClientProxyUrlBuilder : ITransientDependency { - protected IServiceScopeFactory ServiceProviderFactory { get; } - - public ClientProxyUrlBuilder(IServiceScopeFactory serviceProviderFactory) - { - ServiceProviderFactory = serviceProviderFactory; - } - public string GenerateUrlWithParameters(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) { // The ASP.NET Core route value provider and query string value provider: From d673f1b396f7787bbf958c3b903be20a3835d9ac Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Thu, 23 Sep 2021 09:28:34 +0300 Subject: [PATCH 24/42] fix theme-shared testing errors --- .../extensions/src/tests/enum.util.spec.ts | 7 +- .../extensions/src/tests/state.util.spec.ts | 5 +- .../tests/modal-container.component.spec.ts | 34 -------- .../src/lib/tests/modal.component.spec.ts | 2 +- .../src/lib/tests/modal.service.spec.ts | 87 ------------------- .../tests/sort-order-icon.component.spec.ts | 46 ---------- .../src/lib/tests/validation-utils.spec.ts | 36 +++++--- 7 files changed, 31 insertions(+), 186 deletions(-) delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tests/modal-container.component.spec.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tests/modal.service.spec.ts delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts b/npm/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts index ffdc6224a5..9a292541f1 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts @@ -1,5 +1,5 @@ import { ConfigStateService, LocalizationService } from '@abp/ng.core'; -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, of } from 'rxjs'; import { take } from 'rxjs/operators'; import { PropData } from '../lib/models/props'; import { createEnum, createEnumOptions, createEnumValueResolver } from '../lib/utils/enum.util'; @@ -109,8 +109,9 @@ describe('Enum Utils', () => { }); function createMockLocalizationService() { - const configState = new ConfigStateService(null); - configState.setState({ localization: mockL10n } as any); + const fakeAppConfigService = { get: () => of({ localization: mockL10n }) } as any; + const configState = new ConfigStateService(fakeAppConfigService); + configState.refreshAppState(); return new LocalizationService(mockSessionState, null, null, configState); } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts b/npm/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts index 000b4b4255..cedd632165 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts @@ -10,8 +10,9 @@ import { mapEntitiesToContributors, } from '../lib/utils/state.util'; -const configState = new ConfigStateService(null); -configState.setState(createMockState() as any); +const fakeAppConfigService = { get: () => of(createMockState()) } as any; +const configState = new ConfigStateService(fakeAppConfigService); +configState.refreshAppState(); describe('State Utils', () => { describe('#getObjectExtensionEntitiesFromStore', () => { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/modal-container.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/modal-container.component.spec.ts deleted file mode 100644 index 9cb45127e5..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/modal-container.component.spec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Component, ComponentFactoryResolver, ComponentRef } from '@angular/core'; -import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; -import { ModalContainerComponent } from '../components/modal/modal-container.component'; - -describe('ModalContainerComponent', () => { - @Component({ template: '
                                                  bar
                                                  ' }) - class TestComponent {} - - let componentRef: ComponentRef; - let spectator: Spectator; - - const createComponent = createComponentFactory({ - component: ModalContainerComponent, - entryComponents: [TestComponent], - }); - - beforeEach(() => (spectator = createComponent())); - - afterEach(() => componentRef.destroy()); - - describe('#container', () => { - it('should be a ViewContainerRef', () => { - let foo = document.querySelector('div.foo'); - expect(foo).toBeNull(); - - const cfResolver = spectator.inject(ComponentFactoryResolver); - const factory = cfResolver.resolveComponentFactory(TestComponent); - componentRef = spectator.component.container.createComponent(factory); - - foo = document.querySelector('div.foo'); - expect(foo.textContent).toBe('bar'); - }); - }); -}); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts index 88ec95c700..e1f15db581 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts @@ -103,7 +103,7 @@ describe('ModalComponent', () => { xit('should close with the abpClose', async () => { await wait0ms(); - spectator.dispatchMouseEvent(spectator.component.abpClose, 'click'); + spectator.dispatchMouseEvent(spectator.query('[abpClose]'), 'click'); await wait0ms(); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/modal.service.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/modal.service.spec.ts deleted file mode 100644 index 0c383bc7cf..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/modal.service.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Component, TemplateRef, ViewChild } from '@angular/core'; -import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; -import { ModalContainerComponent } from '../components/modal/modal-container.component'; -import { ModalService } from '../services'; - -describe('ModalContainerComponent', () => { - @Component({ - template: ` - -
                                                  bar
                                                  -
                                                  - `, - }) - class TestComponent { - @ViewChild('ref', { static: true }) - template: TemplateRef; - - constructor(public modalService: ModalService) {} - } - - let spectator: Spectator; - let service: ModalService; - - const createComponent = createComponentFactory({ - component: TestComponent, - entryComponents: [ModalContainerComponent], - }); - - beforeEach(() => { - spectator = createComponent(); - service = spectator.component.modalService; - }); - - afterEach(() => { - service.getContainer().clear(); - service['containerComponentRef'].changeDetectorRef.detectChanges(); - service['containerComponentRef'].destroy(); - }); - - describe('#getContainer', () => { - it('should return the ViewContainerRef of ModalContainerComponent', () => { - let foo = document.querySelector('div.foo'); - expect(foo).toBeNull(); - - const containerRef = service.getContainer(); - const embeddedViewRef = containerRef.createEmbeddedView(spectator.component.template); - - foo = document.querySelector('div.foo'); - expect(foo).toBe(embeddedViewRef.rootNodes[0]); - expect(foo.textContent).toBe('bar'); - }); - }); - - describe('#renderTemplate', () => { - it('should render given template using the ViewContainerRef of ModalContainerComponent', () => { - let foo = document.querySelector('div.foo'); - expect(foo).toBeNull(); - - service.renderTemplate(spectator.component.template); - - foo = document.querySelector('div.foo'); - expect(foo.textContent).toBe('bar'); - }); - }); - - describe('#detectChanges', () => { - it('should call detectChanges on the containerComponentRef', () => { - const spy = jest.spyOn(service['containerComponentRef'].changeDetectorRef, 'detectChanges'); - - service.detectChanges(); - - expect(spy).toHaveBeenCalledTimes(1); - }); - }); - - describe('#clearModal', () => { - it('should call clear on the ViewContainerRef and detectChanges', () => { - const clear = jest.spyOn(service.getContainer(), 'clear'); - const detectChanges = jest.spyOn(service, 'detectChanges'); - - service.clearModal(); - - expect(clear).toHaveBeenCalledTimes(1); - expect(detectChanges).toHaveBeenCalledTimes(1); - }); - }); -}); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts deleted file mode 100644 index a91f5b76c1..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; -import { SortOrderIconComponent } from '../components/sort-order-icon/sort-order-icon.component'; - -describe('SortOrderIconComponent', () => { - let spectator: SpectatorHost; - let component: SortOrderIconComponent; - const createHost = createHostFactory(SortOrderIconComponent); - - beforeEach(() => { - spectator = createHost( - '', - { - hostProps: { - selectedSortKey: '', - order: '', - }, - }, - ); - component = spectator.component; - }); - - test('should have correct icon class when selectedSortKey and sortKey are the same', () => { - const newKey = 'testKey'; - component.sort(newKey); - expect(component.selectedSortKey).toBe(newKey); - expect(component.order).toBe('asc'); - expect(component.icon).toBe('sorting_asc'); - }); - - test("shouldn't have any icon class when sortKey and selectedSortKey are different", () => { - const newKey = 'otherKey'; - component.sort(newKey); - expect(component.selectedSortKey).toBe(newKey); - expect(component.order).toBe('asc'); - expect(component.icon).toBe('sorting'); - }); - - test('should change order correctly when sort function called', () => { - component.sort('testKey'); - expect(component.order).toBe('asc'); - component.sort('testKey'); - expect(component.order).toBe('desc'); - component.sort('testKey'); - expect(component.order).toBe(''); - }); -}); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts index be212ac8dc..54e828036c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts @@ -1,4 +1,4 @@ -import { ConfigStateService } from '@abp/ng.core'; +import { AbpApplicationConfigurationService, ConfigStateService } from '@abp/ng.core'; import { CoreTestingModule } from '@abp/ng.core/testing'; import { HttpClient } from '@angular/common/http'; import { Component, Injector } from '@angular/core'; @@ -6,6 +6,7 @@ import { Validators } from '@angular/forms'; import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import { NgxValidateCoreModule, validatePassword } from '@ngx-validate/core'; import { OAuthService } from 'angular-oauth2-oidc'; +import { of } from 'rxjs'; import { getPasswordValidators } from '../utils'; @Component({ template: '', selector: 'abp-dummy' }) class DummyComponent {} @@ -16,6 +17,26 @@ describe('ValidationUtils', () => { component: DummyComponent, imports: [CoreTestingModule.withConfig(), NgxValidateCoreModule.forRoot()], mocks: [HttpClient, OAuthService], + providers: [ + { + provide: AbpApplicationConfigurationService, + useValue: { + get: () => + of({ + setting: { + values: { + 'Abp.Identity.Password.RequiredLength': '6', + 'Abp.Identity.Password.RequiredUniqueChars': '1', + 'Abp.Identity.Password.RequireNonAlphanumeric': 'True', + 'Abp.Identity.Password.RequireLowercase': 'True', + 'Abp.Identity.Password.RequireUppercase': 'True', + 'Abp.Identity.Password.RequireDigit': 'True', + }, + }, + }), + }, + }, + ], }); beforeEach(() => (spectator = createComponent())); @@ -23,18 +44,7 @@ describe('ValidationUtils', () => { describe('#getPasswordValidators', () => { it('should return password valdiators', () => { const configState = spectator.inject(ConfigStateService); - configState.setState({ - setting: { - values: { - 'Abp.Identity.Password.RequiredLength': '6', - 'Abp.Identity.Password.RequiredUniqueChars': '1', - 'Abp.Identity.Password.RequireNonAlphanumeric': 'True', - 'Abp.Identity.Password.RequireLowercase': 'True', - 'Abp.Identity.Password.RequireUppercase': 'True', - 'Abp.Identity.Password.RequireDigit': 'True', - }, - }, - }); + configState.refreshAppState(); const validators = getPasswordValidators(spectator.inject(Injector)); const expectedValidators = [ From ae96ff6088ef4ec7fb975b5c0c931bdb251bee3b Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 23 Sep 2021 10:34:37 +0300 Subject: [PATCH 25/42] CmsKit - Implement MultiTenancy --- .../CmsKit/Admin/Menus/MenuItemAdminAppService.cs | 3 ++- .../Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs | 12 +++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs index 32458ecb90..6697a89532 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs @@ -59,7 +59,8 @@ namespace Volo.CmsKit.Admin.Menus input.Order, input.Target, input.ElementId, - input.CssClass + input.CssClass, + CurrentTenant.Id ); await MenuItemRepository.InsertAsync(menuItem); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs index 65d6b0e1ca..34b986b4d1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs @@ -23,7 +23,7 @@ namespace Volo.CmsKit.Menus public string DisplayName { get; protected set; } public bool IsActive { get; set; } - + [NotNull] public string Url { get; protected set; } @@ -39,7 +39,7 @@ namespace Volo.CmsKit.Menus public Guid? PageId { get; protected set; } - public Guid? TenantId { get; protected set; } + public Guid? TenantId { get; protected set; } public MenuItem(Guid id, [NotNull] string displayName, @@ -50,8 +50,9 @@ namespace Volo.CmsKit.Menus int order = 0, [CanBeNull] string target = null, [CanBeNull] string elementId = null, - [CanBeNull] string cssClass = null) - :base(id) + [CanBeNull] string cssClass = null, + [CanBeNull] Guid? tenantId = null) + : base(id) { SetDisplayName(displayName); IsActive = isActive; @@ -62,6 +63,7 @@ namespace Volo.CmsKit.Menus Target = target; ElementId = elementId; CssClass = cssClass; + TenantId = tenantId; } public void SetDisplayName([NotNull] string displayName) @@ -69,7 +71,7 @@ namespace Volo.CmsKit.Menus DisplayName = Check.NotNullOrEmpty(displayName, nameof(displayName), MenuItemConsts.MaxDisplayNameLength); } - public void SetUrl([NotNull]string url) + public void SetUrl([NotNull] string url) { Url = Check.NotNullOrEmpty(url, nameof(url), MenuItemConsts.MaxUrlLength); } From ffffa6723d7aaa0b8689665cdc3f658a2176ece5 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Thu, 23 Sep 2021 11:55:51 +0300 Subject: [PATCH 26/42] change default modal size --- .../feature-management/feature-management.component.html | 2 +- .../identity/src/lib/components/roles/roles.component.html | 2 +- .../identity/src/lib/components/users/users.component.html | 2 +- .../src/lib/components/tenants/tenants.component.html | 4 ++-- .../account-layout/tenant-box/tenant-box.component.html | 2 +- .../theme-shared/src/lib/components/modal/modal.component.ts | 4 ++-- npm/ng-packs/tsconfig.json | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html index 126fb9638c..a9c8032e4d 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html +++ b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html @@ -1,4 +1,4 @@ - +

                                                  {{ 'AbpFeatureManagement::Features' | abpLocalization }}

                                                  diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html index d010fe1983..79c516d8b7 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html @@ -19,7 +19,7 @@
                                                  - +

                                                  {{ (selected?.id ? 'AbpIdentity::Edit' : 'AbpIdentity::NewRole') | abpLocalization }}

                                                  diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html index 881726d490..64ad0dcd06 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -29,7 +29,7 @@
                                                  - +

                                                  {{ (selected?.id ? 'AbpIdentity::Edit' : 'AbpIdentity::NewUser') | abpLocalization }}

                                                  diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html index 28742e3a46..1fe64b0f91 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html +++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html @@ -30,11 +30,11 @@ - +

                                                  {{ - (selected?.id ? 'AbpTenantManagement::Edit' : 'AbpTenantManagement::NewTenant') + (selected?.id ? 'AbpTenantManagement::Edit' : 'AbpTenantManagement::NewTenant') | abpLocalization }}

                                                  diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html index e4381b7b05..ef74c61bc1 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html @@ -24,7 +24,7 @@ - +
                                                  Switch Tenant
                                                  diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index 008a2c3e9b..2cbf09c7f3 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -143,8 +143,8 @@ export class ModalComponent implements OnInit, OnDestroy, DismissableModal { setTimeout(() => this.listen(), 0); this.modalRef = this.modal.open(this.modalContent, { - size: 'lg', - centered: true, + size: 'md', + centered: false, keyboard: false, scrollable: true, beforeDismiss: () => { diff --git a/npm/ng-packs/tsconfig.json b/npm/ng-packs/tsconfig.json index 674468c130..dcca4d0af8 100644 --- a/npm/ng-packs/tsconfig.json +++ b/npm/ng-packs/tsconfig.json @@ -24,7 +24,7 @@ "@abp/ng.core/locale": ["packages/core/locale/src/public-api.ts"], "@abp/ng.core/testing": ["packages/core/testing/src/public-api.ts"], "@abp/ng.feature-management": ["packages/feature-management/src/public-api.ts"], - "@abp/ng.identity": ["packages/identity//src/public-api.ts"], + "@abp/ng.identity": ["packages/identity/src/public-api.ts"], "@abp/ng.identity/config": ["packages/identity/config/src/public-api.ts"], "@abp/ng.permission-management": ["packages/permission-management/src/public-api.ts"], "@abp/ng.setting-management": ["packages/setting-management/src/public-api.ts"], From 4a6cbacaeb863616b853885d2399c5907bcdc381 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 23 Sep 2021 17:13:45 +0800 Subject: [PATCH 27/42] Remove ProfileManagementScriptBundleContributor --- ...ntProfilePasswordManagementGroupViewComponent.cs | 3 --- ...ofilePersonalInfoManagementGroupViewComponent.cs | 3 --- .../ProfileManagementScriptBundleContributor.cs | 13 ------------- 3 files changed, 19 deletions(-) delete mode 100644 modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs index 1c4a0c9936..8bacadfb4a 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/AccountProfilePasswordManagementGroupViewComponent.cs @@ -9,9 +9,6 @@ using Volo.Abp.Validation; namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.Password { - [Widget( - ScriptTypes = new[] { typeof(ProfileManagementScriptBundleContributor) } - )] public class AccountProfilePasswordManagementGroupViewComponent : AbpViewComponent { private readonly IProfileAppService _profileAppService; diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs index d199f32625..c9fb2b660e 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs @@ -9,9 +9,6 @@ using Volo.Abp.Validation; namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.PersonalInfo { - [Widget( - ScriptTypes = new[] { typeof(ProfileManagementScriptBundleContributor) } - )] public class AccountProfilePersonalInfoManagementGroupViewComponent : AbpViewComponent { private readonly IProfileAppService _profileAppService; diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs deleted file mode 100644 index 54a47c84be..0000000000 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/ProfileManagementScriptBundleContributor.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections.Generic; -using Volo.Abp.AspNetCore.Mvc.UI.Bundling; - -namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup -{ - public class ProfileManagementScriptBundleContributor: BundleContributor - { - public override void ConfigureBundle(BundleConfigurationContext context) - { - context.Files.AddIfNotContains("/client-proxies/identity-proxy.js"); - } - } -} From 10b6e1fb01227cf86ebb8840113262d09cd1d639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enis=20Necipo=C4=9Flu?= Date: Thu, 23 Sep 2021 13:51:06 +0300 Subject: [PATCH 28/42] CmsKit - Add pageId setting while inserting MenuItem --- .../Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs index 6697a89532..02fe46402c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs @@ -63,6 +63,15 @@ namespace Volo.CmsKit.Admin.Menus CurrentTenant.Id ); + if (input.PageId.HasValue) + { + MenuManager.SetPageUrl(menuItem, await PageRepository.GetAsync(input.PageId.Value)); + } + else + { + menuItem.SetUrl(input.Url); + } + await MenuItemRepository.InsertAsync(menuItem); return ObjectMapper.Map(menuItem); From de5e8b40fd8679862d0ed35a955e6c2635ee53de Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 23 Sep 2021 19:28:09 +0800 Subject: [PATCH 29/42] Update Text-Templating.md --- docs/zh-Hans/Text-Templating.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/zh-Hans/Text-Templating.md b/docs/zh-Hans/Text-Templating.md index be9cbb3a79..d61c85bc9b 100644 --- a/docs/zh-Hans/Text-Templating.md +++ b/docs/zh-Hans/Text-Templating.md @@ -187,9 +187,9 @@ var result = await _templateRenderer.RenderAsync( 示例中我们并没有创建模型类,但是创建了一个匿名对象模型. -### 大驼峰 与 小驼峰 +### PascalCase 与 snake_case -PascalCase 属性名(如 `UserName`) 在模板中用做小驼峰(如 `userName`). +PascalCase 属性名(如 `UserName`) 在模板中使用蛇形命名(如 `user_name`). ## 本地化 @@ -454,4 +454,4 @@ public class MyTemplateContentProvider * 本文开发和引用的[应用程序示例源码](https://github.com/abpframework/abp-samples/tree/master/TextTemplateDemo). * [本地化系统](Localization.md). -* [虚拟文件系统](Virtual-File-System.md). \ No newline at end of file +* [虚拟文件系统](Virtual-File-System.md). From 17af378d8a1ea5e31daaa8aa56b0992e295add24 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 23 Sep 2021 20:40:23 +0800 Subject: [PATCH 30/42] Check SettingManagementFeatures. --- .../SettingManagement/EmailSettingsAppService.cs | 3 ++- .../Settings/EmailingPageContributor.cs | 15 ++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs index ca3297c87b..35266c4306 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs @@ -59,8 +59,9 @@ namespace Volo.Abp.SettingManagement await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.DefaultFromDisplayName, input.DefaultFromDisplayName); } - private async Task CheckFeatureAsync() + protected virtual async Task CheckFeatureAsync() { + await FeatureChecker.CheckEnabledAsync(SettingManagementFeatures.Enable); if (CurrentTenant.IsAvailable) { await FeatureChecker.CheckEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs index 1cbb75428c..dd596cab16 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs @@ -48,17 +48,18 @@ namespace Volo.Abp.SettingManagement.Web.Settings private async Task CheckFeatureAsync(SettingPageCreationContext context) { - var currentTenant = context.ServiceProvider.GetRequiredService(); - - if (!currentTenant.IsAvailable) + var featureCheck = context.ServiceProvider.GetRequiredService(); + if (!await featureCheck.IsEnabledAsync(SettingManagementFeatures.Enable)) { - return true; + return false; } - var featureCheck = context.ServiceProvider.GetRequiredService(); - - return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + if (context.ServiceProvider.GetRequiredService().IsAvailable) + { + return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + } + return true; } } } From cfd80665406e2f5726ad15ee09e794b93ee4272f Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Thu, 23 Sep 2021 15:41:19 +0300 Subject: [PATCH 31/42] doc: add a note to the tutorial document for common problems while downloading the source code of the sample --- docs/en/Tutorials/Part-1.md | 5 +++++ docs/en/Tutorials/Part-10.md | 5 +++++ docs/en/Tutorials/Part-2.md | 7 +++++++ docs/en/Tutorials/Part-3.md | 5 +++++ docs/en/Tutorials/Part-4.md | 5 +++++ docs/en/Tutorials/Part-5.md | 5 +++++ docs/en/Tutorials/Part-6.md | 5 +++++ docs/en/Tutorials/Part-7.md | 5 +++++ docs/en/Tutorials/Part-8.md | 5 +++++ docs/en/Tutorials/Part-9.md | 5 +++++ 10 files changed, 52 insertions(+) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index d419fc8d27..5bd5d8bd37 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + {{if UI == "MVC" && DB == "EF"}} ### Video Tutorial diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index 11fdd9b781..398ac973cd 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + ## Introduction We have created `Book` and `Author` functionalities for the book store application. However, currently there is no relation between these entities. diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 5df5dae343..8d8a9223c1 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + {{if UI == "MVC" && DB == "EF"}} ### Video Tutorial @@ -85,6 +90,8 @@ acme.bookStore.books.book.create({ }); ```` +> If you downloaded the source code of the tutorial and following the steps from the sample, you should also pass the `authorId` parameter to the create method for **creating a new book**. + You should see a message in the console something like that: ````text diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index e724fa2c9f..2d72fd4a75 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + {{if UI == "MVC" && DB == "EF"}} ### Video Tutorial diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 2202aba704..a9b223214d 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + {{if UI == "MVC" && DB == "EF"}} ### Video Tutorial diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index e8274116f4..9ae45238ed 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + {{if UI == "MVC" && DB == "EF"}} ### Video Tutorial diff --git a/docs/en/Tutorials/Part-6.md b/docs/en/Tutorials/Part-6.md index f6601a9afd..c56d6c5884 100644 --- a/docs/en/Tutorials/Part-6.md +++ b/docs/en/Tutorials/Part-6.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + ## Introduction In the previous parts, we've used the ABP infrastructure to easily build some services; diff --git a/docs/en/Tutorials/Part-7.md b/docs/en/Tutorials/Part-7.md index 45820cde09..4871d28bf3 100644 --- a/docs/en/Tutorials/Part-7.md +++ b/docs/en/Tutorials/Part-7.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + ## Introduction This part explains how to configure the database integration for the `Author` entity introduced in the previous part. diff --git a/docs/en/Tutorials/Part-8.md b/docs/en/Tutorials/Part-8.md index fe8cbd2732..f3cb88de95 100644 --- a/docs/en/Tutorials/Part-8.md +++ b/docs/en/Tutorials/Part-8.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + ## Introduction This part explains to create an application layer for the `Author` entity created before. diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index e2df7c262e..63d958fb56 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -34,6 +34,11 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) +> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). + +> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> `git config --system core.longpaths true` + ## Introduction This part explains how to create a CRUD page for the `Author` entity introduced in the previous parts. From 60fb80663129354e22406d427ad2f6daf20908f4 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:26:58 +0300 Subject: [PATCH 32/42] Update Part-1.md --- docs/en/Tutorials/Part-1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 5bd5d8bd37..210ecbe966 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` {{if UI == "MVC" && DB == "EF"}} From f3faab2b6da76b8b63e6ba39ed3e9b55006a33f9 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:32:21 +0300 Subject: [PATCH 33/42] Update Part-10.md --- docs/en/Tutorials/Part-10.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index 398ac973cd..5d5ea9618b 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` ## Introduction From 4774f3366dc004d89c57b3a7e2b010bbc5fac4ce Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:35:57 +0300 Subject: [PATCH 34/42] Update Part-2.md --- docs/en/Tutorials/Part-2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 8d8a9223c1..b84ece9e97 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` {{if UI == "MVC" && DB == "EF"}} From ad5b5154f4d4988c6a0a8a176d9bb61b2b6d2125 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:37:10 +0300 Subject: [PATCH 35/42] Update Part-3.md --- docs/en/Tutorials/Part-3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 2d72fd4a75..92e04d0b41 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` {{if UI == "MVC" && DB == "EF"}} From 38a62789244cf122b9ed73822fb59776fd48bb3d Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:37:30 +0300 Subject: [PATCH 36/42] Update Part-9.md --- docs/en/Tutorials/Part-9.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index 63d958fb56..d6fa004596 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` ## Introduction From 401bd69c5e960dc4e75d7e8fcb3eb86de266659d Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:37:50 +0300 Subject: [PATCH 37/42] Update Part-8.md --- docs/en/Tutorials/Part-8.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-8.md b/docs/en/Tutorials/Part-8.md index f3cb88de95..d8dd4bc5b1 100644 --- a/docs/en/Tutorials/Part-8.md +++ b/docs/en/Tutorials/Part-8.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` ## Introduction From 195dd53cbad03c1304b9699ca279352304df8c7c Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:38:12 +0300 Subject: [PATCH 38/42] Update Part-7.md --- docs/en/Tutorials/Part-7.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-7.md b/docs/en/Tutorials/Part-7.md index 4871d28bf3..3284ae98d4 100644 --- a/docs/en/Tutorials/Part-7.md +++ b/docs/en/Tutorials/Part-7.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` ## Introduction From 241b208e80f9f4d890ead909a439b4f82207c695 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:38:33 +0300 Subject: [PATCH 39/42] Update Part-6.md --- docs/en/Tutorials/Part-6.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Tutorials/Part-6.md b/docs/en/Tutorials/Part-6.md index c56d6c5884..7d7c4e2d94 100644 --- a/docs/en/Tutorials/Part-6.md +++ b/docs/en/Tutorials/Part-6.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` ## Introduction @@ -275,4 +275,4 @@ This part covered the domain layer of the authors functionality of the book stor ## The Next Part -See the [next part](Part-7.md) of this tutorial. \ No newline at end of file +See the [next part](Part-7.md) of this tutorial. From 50cd311b9361ece86fd22882a06cbc1bfdfae118 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:38:48 +0300 Subject: [PATCH 40/42] Update Part-5.md --- docs/en/Tutorials/Part-5.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index 9ae45238ed..4a4611809a 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` {{if UI == "MVC" && DB == "EF"}} @@ -632,4 +632,4 @@ private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) ## The Next Part -See the [next part](Part-6.md) of this tutorial. \ No newline at end of file +See the [next part](Part-6.md) of this tutorial. From 003eba5dfc1bc1fad6f8a48cbaefe162e5e90108 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Thu, 23 Sep 2021 16:39:08 +0300 Subject: [PATCH 41/42] Update Part-4.md --- docs/en/Tutorials/Part-4.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index a9b223214d..036d8a18bd 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -34,9 +34,9 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer * [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) -> If you've been faced with the "filename too long" or "unzip error" on Windows, please try to download the samples on your root directory (You shouldn't exceed 250 chars for your path on some Windows versions). If this does not work for you you can [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). +> If you encounter the "filename too long" or "unzip error" on Windows, it's probably related to the Windows maximum file path limitation. Windows has a maximum file path limitation of 250 characters. To solve this, [enable the long path option in Windows 10](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later). -> If you've been faced with the Git related long path errors try the following command to enable long paths support in Git for Windows. (https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) +> If you face long path errors related to Git, try the following command to enable long paths in Windows. See https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path > `git config --system core.longpaths true` {{if UI == "MVC" && DB == "EF"}} From 2ceb1e3d1799f43469ebe12e3159d9e1513bbd81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 23 Sep 2021 16:50:59 +0300 Subject: [PATCH 42/42] Revert "CmsKit - Fix setting a Page while creating MenuItem #10123" --- .../Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs index fb595009fa..37e6df0da6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs @@ -64,15 +64,6 @@ namespace Volo.CmsKit.Admin.Menus CurrentTenant.Id ); - if (input.PageId.HasValue) - { - MenuManager.SetPageUrl(menuItem, await PageRepository.GetAsync(input.PageId.Value)); - } - else - { - menuItem.SetUrl(input.Url); - } - await MenuItemRepository.InsertAsync(menuItem); return ObjectMapper.Map(menuItem);