diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml
index c325513079..c0a95fb5cc 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml
@@ -15,6 +15,7 @@
}
@section scripts {
+
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml
index 810a0e3203..0d970c3c8a 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml
@@ -17,8 +17,9 @@
}
@section scripts {
-
-
+
+
+
}
diff --git a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
index 363d806ffe..ca504b6800 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
+++ b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
@@ -4,7 +4,7 @@
- net5.0
+ net6.0
Volo.Blogging.Web
Volo.Blogging.Web
2.8
@@ -19,8 +19,8 @@
-
-
+
+
@@ -32,10 +32,14 @@
+
+
+
+
diff --git a/modules/blogging/src/Volo.Blogging.Web/wwwroot/client-proxies/blogging-proxy.js b/modules/blogging/src/Volo.Blogging.Web/wwwroot/client-proxies/blogging-proxy.js
new file mode 100644
index 0000000000..3b0905a0d5
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Web/wwwroot/client-proxies/blogging-proxy.js
@@ -0,0 +1,190 @@
+/* This file is automatically generated by ABP framework to use MVC Controllers from javascript. */
+
+
+// module blogging
+
+(function(){
+
+ // controller volo.blogging.blogFiles
+
+ (function(){
+
+ abp.utils.createNamespace(window, 'volo.blogging.blogFiles');
+
+ volo.blogging.blogFiles.get = function(name, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/files/' + name + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.blogFiles.getForWeb = function(name, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/files/www/' + name + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.blogFiles.create = function(input, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/files',
+ type: 'POST',
+ data: JSON.stringify(input)
+ }, ajaxParams));
+ };
+
+ volo.blogging.blogFiles.uploadImage = function(file, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/files/images/upload',
+ type: 'POST'
+ }, ajaxParams));
+ };
+
+ })();
+
+ // controller volo.blogging.blogs
+
+ (function(){
+
+ abp.utils.createNamespace(window, 'volo.blogging.blogs');
+
+ volo.blogging.blogs.getList = function(ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/blogs',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.blogs.getByShortName = function(shortName, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/blogs/by-shortname/' + shortName + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.blogs.get = function(id, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/blogs/' + id + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ })();
+
+ // controller volo.blogging.comments
+
+ (function(){
+
+ abp.utils.createNamespace(window, 'volo.blogging.comments');
+
+ volo.blogging.comments.getHierarchicalListOfPost = function(postId, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/comments/hierarchical/' + postId + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.comments.create = function(input, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/comments',
+ type: 'POST',
+ data: JSON.stringify(input)
+ }, ajaxParams));
+ };
+
+ volo.blogging.comments.update = function(id, input, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/comments/' + id + '',
+ type: 'PUT',
+ data: JSON.stringify(input)
+ }, ajaxParams));
+ };
+
+ volo.blogging.comments['delete'] = function(id, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/comments/' + id + '',
+ type: 'DELETE',
+ dataType: null
+ }, ajaxParams));
+ };
+
+ })();
+
+ // controller volo.blogging.posts
+
+ (function(){
+
+ abp.utils.createNamespace(window, 'volo.blogging.posts');
+
+ volo.blogging.posts.getListByBlogIdAndTagName = function(blogId, tagName, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/posts/' + blogId + '/all' + abp.utils.buildQueryString([{ name: 'tagName', value: tagName }]) + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.posts.getTimeOrderedList = function(blogId, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/posts/' + blogId + '/all/by-time',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.posts.getForReading = function(input, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/posts/read' + abp.utils.buildQueryString([{ name: 'url', value: input.url }, { name: 'blogId', value: input.blogId }]) + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.posts.get = function(id, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/posts/' + id + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.blogging.posts.create = function(input, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/posts',
+ type: 'POST',
+ data: JSON.stringify(input)
+ }, ajaxParams));
+ };
+
+ volo.blogging.posts.update = function(id, input, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/posts/' + id + '',
+ type: 'PUT',
+ data: JSON.stringify(input)
+ }, ajaxParams));
+ };
+
+ volo.blogging.posts['delete'] = function(id, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/posts/' + id + '',
+ type: 'DELETE',
+ dataType: null
+ }, ajaxParams));
+ };
+
+ })();
+
+ // controller volo.blogging.tags
+
+ (function(){
+
+ abp.utils.createNamespace(window, 'volo.blogging.tags');
+
+ volo.blogging.tags.getPopularTags = function(blogId, input, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/blogging/tags/popular/' + blogId + '' + abp.utils.buildQueryString([{ name: 'resultCount', value: input.resultCount }, { name: 'minimumPostCount', value: input.minimumPostCount }]) + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ })();
+
+})();
+
+
diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
index 8db4427bf3..311fb70e29 100644
--- a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
@@ -1,7 +1,7 @@
- net5.0
+ net6.0
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
index 0cb4586c02..1226436a12 100644
--- a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
@@ -1,7 +1,7 @@
- net5.0
+ net6.0
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
index b3a2f9cc71..064f524ea3 100644
--- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
@@ -1,7 +1,7 @@
- net5.0
+ net6.0
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
index 93942029b5..e6b7cc1b87 100644
--- a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
@@ -1,7 +1,7 @@
- net5.0
+ net6.0
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
index 45b57946ce..5dc973770e 100644
--- a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
@@ -1,7 +1,7 @@
- net5.0
+ net6.0
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
index cdc44642c9..47cac805fd 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
@@ -4,13 +4,13 @@
- net5.0
+ net6.0
true
-
-
+
+
diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
index d16564c12e..06204eaa87 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
+++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
@@ -4,7 +4,7 @@
- net5.0
+ net6.0
Volo.ClientSimulation.Web
Volo.ClientSimulation.Web
Library
diff --git a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
index 432cb2adb3..274c11aed3 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
+++ b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
@@ -4,7 +4,7 @@
- net5.0
+ net6.0
Volo.ClientSimulation
Volo.ClientSimulation
diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts b/modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts
index e97243133f..0c8942d598 100644
--- a/modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts
+++ b/modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts
@@ -3,17 +3,16 @@ import { CoreModule } from '@abp/ng.core';
import { IdentityConfigModule } from '@abp/ng.identity/config';
import { SettingManagementConfigModule } from '@abp/ng.setting-management/config';
import { TenantManagementConfigModule } from '@abp/ng.tenant-management/config';
+import { ThemeBasicModule } from '@abp/ng.theme.basic';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { CmsKitConfigModule } from '@my-company-name/cms-kit/config';
-import { NgxsModule } from '@ngxs/store';
import { environment } from '../environments/environment';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { APP_ROUTE_PROVIDER } from './route.provider';
-import { ThemeBasicModule } from '@abp/ng.theme.basic';
@NgModule({
imports: [
@@ -31,7 +30,6 @@ import { ThemeBasicModule } from '@abp/ng.theme.basic';
CmsKitConfigModule.forRoot(),
TenantManagementConfigModule.forRoot(),
SettingManagementConfigModule.forRoot(),
- NgxsModule.forRoot(),
ThemeBasicModule.forRoot(),
],
providers: [APP_ROUTE_PROVIDER],
diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json
index 48d1823cea..0a047d88ec 100644
--- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json
+++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json
@@ -1,4 +1,4 @@
-{
+ {
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
@@ -24,4 +24,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj
index 2fc36d2f4b..f72684cfa5 100644
--- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj
+++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj
@@ -1,17 +1,17 @@
- net5.0
+ net6.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
-
-
-
-
+
+
+
+
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 5440db1bfe..48871c910a 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
@@ -1,16 +1,16 @@
- net5.0
+ net6.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
-
-
-
+
+
+
@@ -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").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
+ renderOption(select, optionLabel, optionValue);
+ }
+ });
+ select.focus();
+ },
+ radio: (popup, inputOptions, params) => {
+ const radio = getChildByClass(popup, swalClasses.radio);
+ inputOptions.forEach(inputOption => {
+ const radioValue = inputOption[0];
+ const radioLabel = inputOption[1];
+ const radioInput = document.createElement('input');
+ const radioLabelElement = document.createElement('label');
+ radioInput.type = 'radio';
+ radioInput.name = swalClasses.radio;
+ radioInput.value = radioValue;
+
+ if (isSelected(radioValue, params.inputValue)) {
+ radioInput.checked = true;
+ }
+
+ const label = document.createElement('span');
+ setInnerHtml(label, radioLabel);
+ label.className = swalClasses.label;
+ radioLabelElement.appendChild(radioInput);
+ radioLabelElement.appendChild(label);
+ radio.appendChild(radioLabelElement);
+ });
+ const radios = radio.querySelectorAll('input');
+
+ if (radios.length) {
+ radios[0].focus();
+ }
+ }
+ };
+ /**
+ * Converts `inputOptions` into an array of `[value, label]`s
+ * @param inputOptions
+ */
+
+ const formatInputOptions = inputOptions => {
+ const result = [];
+
+ if (typeof Map !== 'undefined' && inputOptions instanceof Map) {
+ inputOptions.forEach((value, key) => {
+ let valueFormatted = value;
+
+ if (typeof valueFormatted === 'object') {
+ // 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').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").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
+ renderOption(select, optionLabel, optionValue);
+ }
+ });
+ select.focus();
+ },
+ radio: (popup, inputOptions, params) => {
+ const radio = getChildByClass(popup, swalClasses.radio);
+ inputOptions.forEach(inputOption => {
+ const radioValue = inputOption[0];
+ const radioLabel = inputOption[1];
+ const radioInput = document.createElement('input');
+ const radioLabelElement = document.createElement('label');
+ radioInput.type = 'radio';
+ radioInput.name = swalClasses.radio;
+ radioInput.value = radioValue;
+
+ if (isSelected(radioValue, params.inputValue)) {
+ radioInput.checked = true;
+ }
+
+ const label = document.createElement('span');
+ setInnerHtml(label, radioLabel);
+ label.className = swalClasses.label;
+ radioLabelElement.appendChild(radioInput);
+ radioLabelElement.appendChild(label);
+ radio.appendChild(radioLabelElement);
+ });
+ const radios = radio.querySelectorAll('input');
+
+ if (radios.length) {
+ radios[0].focus();
+ }
+ }
+ };
+ /**
+ * Converts `inputOptions` into an array of `[value, label]`s
+ * @param inputOptions
+ */
+
+ const formatInputOptions = inputOptions => {
+ const result = [];
+
+ if (typeof Map !== 'undefined' && inputOptions instanceof Map) {
+ inputOptions.forEach((value, key) => {
+ let valueFormatted = value;
+
+ if (typeof valueFormatted === 'object') {
+ // 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').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/Volo.CmsKit.Web.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj
index c102de32b0..4432a79f55 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj
@@ -1,16 +1,16 @@
- net5.0
+ net6.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
-
-
-
+
+
+
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").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
+ renderOption(select, optionLabel, optionValue);
+ }
+ });
+ select.focus();
+ },
+ radio: (popup, inputOptions, params) => {
+ const radio = getChildByClass(popup, swalClasses.radio);
+ inputOptions.forEach(inputOption => {
+ const radioValue = inputOption[0];
+ const radioLabel = inputOption[1];
+ const radioInput = document.createElement('input');
+ const radioLabelElement = document.createElement('label');
+ radioInput.type = 'radio';
+ radioInput.name = swalClasses.radio;
+ radioInput.value = radioValue;
+
+ if (isSelected(radioValue, params.inputValue)) {
+ radioInput.checked = true;
+ }
+
+ const label = document.createElement('span');
+ setInnerHtml(label, radioLabel);
+ label.className = swalClasses.label;
+ radioLabelElement.appendChild(radioInput);
+ radioLabelElement.appendChild(label);
+ radio.appendChild(radioLabelElement);
+ });
+ const radios = radio.querySelectorAll('input');
+
+ if (radios.length) {
+ radios[0].focus();
+ }
+ }
+ };
+ /**
+ * Converts `inputOptions` into an array of `[value, label]`s
+ * @param inputOptions
+ */
+
+ const formatInputOptions = inputOptions => {
+ const result = [];
+
+ if (typeof Map !== 'undefined' && inputOptions instanceof Map) {
+ inputOptions.forEach((value, key) => {
+ let valueFormatted = value;
+
+ if (typeof valueFormatted === 'object') {
+ // 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').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").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
+ renderOption(select, optionLabel, optionValue);
+ }
+ });
+ select.focus();
+ },
+ radio: (popup, inputOptions, params) => {
+ const radio = getChildByClass(popup, swalClasses.radio);
+ inputOptions.forEach(inputOption => {
+ const radioValue = inputOption[0];
+ const radioLabel = inputOption[1];
+ const radioInput = document.createElement('input');
+ const radioLabelElement = document.createElement('label');
+ radioInput.type = 'radio';
+ radioInput.name = swalClasses.radio;
+ radioInput.value = radioValue;
+
+ if (isSelected(radioValue, params.inputValue)) {
+ radioInput.checked = true;
+ }
+
+ const label = document.createElement('span');
+ setInnerHtml(label, radioLabel);
+ label.className = swalClasses.label;
+ radioLabelElement.appendChild(radioInput);
+ radioLabelElement.appendChild(label);
+ radio.appendChild(radioLabelElement);
+ });
+ const radios = radio.querySelectorAll('input');
+
+ if (radios.length) {
+ radios[0].focus();
+ }
+ }
+ };
+ /**
+ * Converts `inputOptions` into an array of `[value, label]`s
+ * @param inputOptions
+ */
+
+ const formatInputOptions = inputOptions => {
+ const result = [];
+
+ if (typeof Map !== 'undefined' && inputOptions instanceof Map) {
+ inputOptions.forEach((value, key) => {
+ let valueFormatted = value;
+
+ if (typeof valueFormatted === 'object') {
+ // 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').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 1c2fe7ddc5..8f49a165cd 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
@@ -1,15 +1,15 @@
- net5.0
+ net6.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
-
-
+
+
@@ -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").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
+ renderOption(select, optionLabel, optionValue);
+ }
+ });
+ select.focus();
+ },
+ radio: (popup, inputOptions, params) => {
+ const radio = getChildByClass(popup, swalClasses.radio);
+ inputOptions.forEach(inputOption => {
+ const radioValue = inputOption[0];
+ const radioLabel = inputOption[1];
+ const radioInput = document.createElement('input');
+ const radioLabelElement = document.createElement('label');
+ radioInput.type = 'radio';
+ radioInput.name = swalClasses.radio;
+ radioInput.value = radioValue;
+
+ if (isSelected(radioValue, params.inputValue)) {
+ radioInput.checked = true;
+ }
+
+ const label = document.createElement('span');
+ setInnerHtml(label, radioLabel);
+ label.className = swalClasses.label;
+ radioLabelElement.appendChild(radioInput);
+ radioLabelElement.appendChild(label);
+ radio.appendChild(radioLabelElement);
+ });
+ const radios = radio.querySelectorAll('input');
+
+ if (radios.length) {
+ radios[0].focus();
+ }
+ }
+ };
+ /**
+ * Converts `inputOptions` into an array of `[value, label]`s
+ * @param inputOptions
+ */
+
+ const formatInputOptions = inputOptions => {
+ const result = [];
+
+ if (typeof Map !== 'undefined' && inputOptions instanceof Map) {
+ inputOptions.forEach((value, key) => {
+ let valueFormatted = value;
+
+ if (typeof valueFormatted === 'object') {
+ // 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