Icard/angular-clarity-master(work.../node_modules/sweetalert2/dist/sweetalert2.js

4611 lines
145 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* sweetalert2 v11.10.7
* 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 = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Sweetalert2 = factory());
})(this, (function () { 'use strict';
function _assertClassBrand(e, t, n) {
if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
throw new TypeError("Private element is not present on this object");
}
function _callSuper(t, o, e) {
return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _classPrivateFieldGet2(s, a) {
return s.get(_assertClassBrand(s, a));
}
function _classPrivateFieldSet2(s, a, r) {
return s.set(_assertClassBrand(s, a), r), r;
}
function _construct(t, e, r) {
if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
var o = [null];
o.push.apply(o, e);
var p = new (t.bind.apply(t, o))();
return r && _setPrototypeOf(p, r.prototype), p;
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
} catch (t) {}
return (_isNativeReflectConstruct = function () {
return !!t;
})();
}
function _iterableToArrayLimit(r, l) {
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (null != t) {
var e,
n,
i,
u,
a = [],
f = !0,
o = !1;
try {
if (i = (t = t.call(r)).next, 0 === l) {
if (Object(t) !== t) return;
f = !1;
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
} catch (r) {
o = !0, n = r;
} finally {
try {
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
} finally {
if (o) throw n;
}
}
return a;
}
}
function _toPrimitive(t, r) {
if ("object" != typeof t || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != typeof i) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == typeof i ? i : String(i);
}
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _superPropBase(object, property) {
while (!Object.prototype.hasOwnProperty.call(object, property)) {
object = _getPrototypeOf(object);
if (object === null) break;
}
return object;
}
function _get() {
if (typeof Reflect !== "undefined" && Reflect.get) {
_get = Reflect.get.bind();
} else {
_get = function _get(target, property, receiver) {
var base = _superPropBase(target, property);
if (!base) return;
var desc = Object.getOwnPropertyDescriptor(base, property);
if (desc.get) {
return desc.get.call(arguments.length < 3 ? target : receiver);
}
return desc.value;
};
}
return _get.apply(this, arguments);
}
function _slicedToArray(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _checkPrivateRedeclaration(obj, privateCollection) {
if (privateCollection.has(obj)) {
throw new TypeError("Cannot initialize the same private elements twice on an object");
}
}
function _classPrivateFieldInitSpec(obj, privateMap, value) {
_checkPrivateRedeclaration(obj, privateMap);
privateMap.set(obj, value);
}
var RESTORE_FOCUS_TIMEOUT = 100;
/** @type {GlobalState} */
var globalState = {};
var focusPreviousActiveElement = function focusPreviousActiveElement() {
if (globalState.previousActiveElement instanceof HTMLElement) {
globalState.previousActiveElement.focus();
globalState.previousActiveElement = null;
} else if (document.body) {
document.body.focus();
}
};
/**
* Restore previous active (focused) element
*
* @param {boolean} returnFocus
* @returns {Promise<void>}
*/
var restoreActiveElement = function restoreActiveElement(returnFocus) {
return new Promise(function (resolve) {
if (!returnFocus) {
return resolve();
}
var x = window.scrollX;
var y = window.scrollY;
globalState.restoreFocusTimeout = setTimeout(function () {
focusPreviousActiveElement();
resolve();
}, RESTORE_FOCUS_TIMEOUT); // issues/900
window.scrollTo(x, y);
});
};
var swalPrefix = 'swal2-';
/**
* @typedef
* { | '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'
* } SwalClass
* @typedef {Record<SwalClass, string>} SwalClasses
*/
/**
* @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon
* @typedef {Record<SwalIcon, string>} SwalIcons
*/
/** @type {SwalClass[]} */
var classNames = ['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'];
var swalClasses = classNames.reduce(function (acc, className) {
acc[className] = swalPrefix + className;
return acc;
}, /** @type {SwalClasses} */{});
/** @type {SwalIcon[]} */
var icons = ['success', 'warning', 'info', 'question', 'error'];
var iconTypes = icons.reduce(function (acc, icon) {
acc[icon] = swalPrefix + icon;
return acc;
}, /** @type {SwalIcons} */{});
var consolePrefix = 'SweetAlert2:';
/**
* Capitalize the first letter of a string
*
* @param {string} str
* @returns {string}
*/
var capitalizeFirstLetter = function capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
};
/**
* Standardize console warnings
*
* @param {string | string[]} message
*/
var warn = function warn(message) {
console.warn("".concat(consolePrefix, " ").concat(_typeof(message) === 'object' ? message.join(' ') : message));
};
/**
* Standardize console errors
*
* @param {string} message
*/
var error = function error(message) {
console.error("".concat(consolePrefix, " ").concat(message));
};
/**
* Private global state for `warnOnce`
*
* @type {string[]}
* @private
*/
var previousWarnOnceMessages = [];
/**
* Show a console warning, but only if it hasn't already been shown
*
* @param {string} message
*/
var warnOnce = function warnOnce(message) {
if (!previousWarnOnceMessages.includes(message)) {
previousWarnOnceMessages.push(message);
warn(message);
}
};
/**
* Show a one-time console warning about deprecated params/methods
*
* @param {string} deprecatedParam
* @param {string} useInstead
*/
var warnAboutDeprecation = function 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 {Function | any} arg
* @returns {any}
*/
var callIfFunction = function callIfFunction(arg) {
return typeof arg === 'function' ? arg() : arg;
};
/**
* @param {any} arg
* @returns {boolean}
*/
var hasToPromiseFn = function hasToPromiseFn(arg) {
return arg && typeof arg.toPromise === 'function';
};
/**
* @param {any} arg
* @returns {Promise<any>}
*/
var asPromise = function asPromise(arg) {
return hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);
};
/**
* @param {any} arg
* @returns {boolean}
*/
var isPromise = function isPromise(arg) {
return arg && Promise.resolve(arg) === arg;
};
/**
* Gets the popup container which contains the backdrop and the popup itself.
*
* @returns {HTMLElement | null}
*/
var getContainer = function getContainer() {
return document.body.querySelector(".".concat(swalClasses.container));
};
/**
* @param {string} selectorString
* @returns {HTMLElement | null}
*/
var elementBySelector = function elementBySelector(selectorString) {
var container = getContainer();
return container ? container.querySelector(selectorString) : null;
};
/**
* @param {string} className
* @returns {HTMLElement | null}
*/
var elementByClass = function elementByClass(className) {
return elementBySelector(".".concat(className));
};
/**
* @returns {HTMLElement | null}
*/
var getPopup = function getPopup() {
return elementByClass(swalClasses.popup);
};
/**
* @returns {HTMLElement | null}
*/
var getIcon = function getIcon() {
return elementByClass(swalClasses.icon);
};
/**
* @returns {HTMLElement | null}
*/
var getIconContent = function getIconContent() {
return elementByClass(swalClasses['icon-content']);
};
/**
* @returns {HTMLElement | null}
*/
var getTitle = function getTitle() {
return elementByClass(swalClasses.title);
};
/**
* @returns {HTMLElement | null}
*/
var getHtmlContainer = function getHtmlContainer() {
return elementByClass(swalClasses['html-container']);
};
/**
* @returns {HTMLElement | null}
*/
var getImage = function getImage() {
return elementByClass(swalClasses.image);
};
/**
* @returns {HTMLElement | null}
*/
var getProgressSteps = function getProgressSteps() {
return elementByClass(swalClasses['progress-steps']);
};
/**
* @returns {HTMLElement | null}
*/
var getValidationMessage = function getValidationMessage() {
return elementByClass(swalClasses['validation-message']);
};
/**
* @returns {HTMLButtonElement | null}
*/
var getConfirmButton = function getConfirmButton() {
return /** @type {HTMLButtonElement} */elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm));
};
/**
* @returns {HTMLButtonElement | null}
*/
var getCancelButton = function getCancelButton() {
return /** @type {HTMLButtonElement} */elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel));
};
/**
* @returns {HTMLButtonElement | null}
*/
var getDenyButton = function getDenyButton() {
return /** @type {HTMLButtonElement} */elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny));
};
/**
* @returns {HTMLElement | null}
*/
var getInputLabel = function getInputLabel() {
return elementByClass(swalClasses['input-label']);
};
/**
* @returns {HTMLElement | null}
*/
var getLoader = function getLoader() {
return elementBySelector(".".concat(swalClasses.loader));
};
/**
* @returns {HTMLElement | null}
*/
var getActions = function getActions() {
return elementByClass(swalClasses.actions);
};
/**
* @returns {HTMLElement | null}
*/
var getFooter = function getFooter() {
return elementByClass(swalClasses.footer);
};
/**
* @returns {HTMLElement | null}
*/
var getTimerProgressBar = function getTimerProgressBar() {
return elementByClass(swalClasses['timer-progress-bar']);
};
/**
* @returns {HTMLElement | null}
*/
var getCloseButton = function getCloseButton() {
return elementByClass(swalClasses.close);
};
// https://github.com/jkup/focusable/blob/master/index.js
var 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";
/**
* @returns {HTMLElement[]}
*/
var getFocusableElements = function getFocusableElements() {
var popup = getPopup();
if (!popup) {
return [];
}
/** @type {NodeListOf<HTMLElement>} */
var focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])');
var focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)
// sort according to tabindex
.sort(function (a, b) {
var tabindexA = parseInt(a.getAttribute('tabindex') || '0');
var tabindexB = parseInt(b.getAttribute('tabindex') || '0');
if (tabindexA > tabindexB) {
return 1;
} else if (tabindexA < tabindexB) {
return -1;
}
return 0;
});
/** @type {NodeListOf<HTMLElement>} */
var otherFocusableElements = popup.querySelectorAll(focusable);
var otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(function (el) {
return el.getAttribute('tabindex') !== '-1';
});
return _toConsumableArray(new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))).filter(function (el) {
return isVisible$1(el);
});
};
/**
* @returns {boolean}
*/
var isModal = function isModal() {
return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);
};
/**
* @returns {boolean}
*/
var isToast = function isToast() {
var popup = getPopup();
if (!popup) {
return false;
}
return hasClass(popup, swalClasses.toast);
};
/**
* @returns {boolean}
*/
var isLoading = function isLoading() {
var popup = getPopup();
if (!popup) {
return false;
}
return popup.hasAttribute('data-loading');
};
/**
* Securely set innerHTML of an element
* https://github.com/sweetalert2/sweetalert2/issues/1926
*
* @param {HTMLElement} elem
* @param {string} html
*/
var setInnerHtml = function setInnerHtml(elem, html) {
elem.textContent = '';
if (html) {
var parser = new DOMParser();
var parsed = parser.parseFromString(html, "text/html");
var head = parsed.querySelector('head');
head && Array.from(head.childNodes).forEach(function (child) {
elem.appendChild(child);
});
var body = parsed.querySelector('body');
body && Array.from(body.childNodes).forEach(function (child) {
if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {
elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507
} else {
elem.appendChild(child);
}
});
}
};
/**
* @param {HTMLElement} elem
* @param {string} className
* @returns {boolean}
*/
var hasClass = function hasClass(elem, className) {
if (!className) {
return false;
}
var classList = className.split(/\s+/);
for (var i = 0; i < classList.length; i++) {
if (!elem.classList.contains(classList[i])) {
return false;
}
}
return true;
};
/**
* @param {HTMLElement} elem
* @param {SweetAlertOptions} params
*/
var removeCustomClasses = function removeCustomClasses(elem, params) {
Array.from(elem.classList).forEach(function (className) {
if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) {
elem.classList.remove(className);
}
});
};
/**
* @param {HTMLElement} elem
* @param {SweetAlertOptions} params
* @param {string} className
*/
var applyCustomClass = function applyCustomClass(elem, params, className) {
removeCustomClasses(elem, params);
if (params.customClass && params.customClass[className]) {
if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) {
warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(_typeof(params.customClass[className]), "\""));
return;
}
addClass(elem, params.customClass[className]);
}
};
/**
* @param {HTMLElement} popup
* @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass
* @returns {HTMLInputElement | null}
*/
var getInput$1 = function getInput(popup, inputClass) {
if (!inputClass) {
return null;
}
switch (inputClass) {
case 'select':
case 'textarea':
case 'file':
return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses[inputClass]));
case 'checkbox':
return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.checkbox, " input"));
case 'radio':
return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.radio, " input:first-child"));
case 'range':
return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.range, " input"));
default:
return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.input));
}
};
/**
* @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input
*/
var focusInput = function focusInput(input) {
input.focus();
// place cursor at end of text in text input
if (input.type !== 'file') {
// http://stackoverflow.com/a/2345915
var val = input.value;
input.value = '';
input.value = val;
}
};
/**
* @param {HTMLElement | HTMLElement[] | null} target
* @param {string | string[] | readonly string[] | undefined} classList
* @param {boolean} condition
*/
var toggleClass = function toggleClass(target, classList, condition) {
if (!target || !classList) {
return;
}
if (typeof classList === 'string') {
classList = classList.split(/\s+/).filter(Boolean);
}
classList.forEach(function (className) {
if (Array.isArray(target)) {
target.forEach(function (elem) {
condition ? elem.classList.add(className) : elem.classList.remove(className);
});
} else {
condition ? target.classList.add(className) : target.classList.remove(className);
}
});
};
/**
* @param {HTMLElement | HTMLElement[] | null} target
* @param {string | string[] | readonly string[] | undefined} classList
*/
var addClass = function addClass(target, classList) {
toggleClass(target, classList, true);
};
/**
* @param {HTMLElement | HTMLElement[] | null} target
* @param {string | string[] | readonly string[] | undefined} classList
*/
var removeClass = function removeClass(target, classList) {
toggleClass(target, classList, false);
};
/**
* Get direct child of an element by class name
*
* @param {HTMLElement} elem
* @param {string} className
* @returns {HTMLElement | undefined}
*/
var getDirectChildByClass = function getDirectChildByClass(elem, className) {
var children = Array.from(elem.children);
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child instanceof HTMLElement && hasClass(child, className)) {
return child;
}
}
};
/**
* @param {HTMLElement} elem
* @param {string} property
* @param {*} value
*/
var applyNumericalStyle = function applyNumericalStyle(elem, property, value) {
if (value === "".concat(parseInt(value))) {
value = parseInt(value);
}
if (value || parseInt(value) === 0) {
elem.style.setProperty(property, typeof value === 'number' ? "".concat(value, "px") : value);
} else {
elem.style.removeProperty(property);
}
};
/**
* @param {HTMLElement | null} elem
* @param {string} display
*/
var show = function show(elem) {
var display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';
elem && (elem.style.display = display);
};
/**
* @param {HTMLElement | null} elem
*/
var hide = function hide(elem) {
elem && (elem.style.display = 'none');
};
/**
* @param {HTMLElement | null} elem
* @param {string} display
*/
var showWhenInnerHtmlPresent = function showWhenInnerHtmlPresent(elem) {
var display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'block';
if (!elem) {
return;
}
new MutationObserver(function () {
toggle(elem, elem.innerHTML, display);
}).observe(elem, {
childList: true,
subtree: true
});
};
/**
* @param {HTMLElement} parent
* @param {string} selector
* @param {string} property
* @param {string} value
*/
var setStyle = function setStyle(parent, selector, property, value) {
/** @type {HTMLElement | null} */
var el = parent.querySelector(selector);
if (el) {
el.style.setProperty(property, value);
}
};
/**
* @param {HTMLElement} elem
* @param {any} condition
* @param {string} display
*/
var toggle = function toggle(elem, condition) {
var display = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'flex';
condition ? show(elem, display) : hide(elem);
};
/**
* borrowed from jquery $(elem).is(':visible') implementation
*
* @param {HTMLElement | null} elem
* @returns {boolean}
*/
var isVisible$1 = function isVisible(elem) {
return !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));
};
/**
* @returns {boolean}
*/
var allButtonsAreHidden = function allButtonsAreHidden() {
return !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());
};
/**
* @param {HTMLElement} elem
* @returns {boolean}
*/
var isScrollable = function isScrollable(elem) {
return !!(elem.scrollHeight > elem.clientHeight);
};
/**
* borrowed from https://stackoverflow.com/a/46352119
*
* @param {HTMLElement} elem
* @returns {boolean}
*/
var hasCssAnimation = function hasCssAnimation(elem) {
var style = window.getComputedStyle(elem);
var animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');
var transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');
return animDuration > 0 || transDuration > 0;
};
/**
* @param {number} timer
* @param {boolean} reset
*/
var animateTimerProgressBar = function animateTimerProgressBar(timer) {
var reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var timerProgressBar = getTimerProgressBar();
if (!timerProgressBar) {
return;
}
if (isVisible$1(timerProgressBar)) {
if (reset) {
timerProgressBar.style.transition = 'none';
timerProgressBar.style.width = '100%';
}
setTimeout(function () {
timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear");
timerProgressBar.style.width = '0%';
}, 10);
}
};
var stopTimerProgressBar = function stopTimerProgressBar() {
var timerProgressBar = getTimerProgressBar();
if (!timerProgressBar) {
return;
}
var timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
timerProgressBar.style.removeProperty('transition');
timerProgressBar.style.width = '100%';
var timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
var timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;
timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%");
};
/**
* Detect Node env
*
* @returns {boolean}
*/
var isNodeEnv = function isNodeEnv() {
return typeof window === 'undefined' || typeof document === 'undefined';
};
var sweetHTML = "\n <div aria-labelledby=\"".concat(swalClasses.title, "\" aria-describedby=\"").concat(swalClasses['html-container'], "\" class=\"").concat(swalClasses.popup, "\" tabindex=\"-1\">\n <button type=\"button\" class=\"").concat(swalClasses.close, "\"></button>\n <ul class=\"").concat(swalClasses['progress-steps'], "\"></ul>\n <div class=\"").concat(swalClasses.icon, "\"></div>\n <img class=\"").concat(swalClasses.image, "\" />\n <h2 class=\"").concat(swalClasses.title, "\" id=\"").concat(swalClasses.title, "\"></h2>\n <div class=\"").concat(swalClasses['html-container'], "\" id=\"").concat(swalClasses['html-container'], "\"></div>\n <input class=\"").concat(swalClasses.input, "\" id=\"").concat(swalClasses.input, "\" />\n <input type=\"file\" class=\"").concat(swalClasses.file, "\" />\n <div class=\"").concat(swalClasses.range, "\">\n <input type=\"range\" />\n <output></output>\n </div>\n <select class=\"").concat(swalClasses.select, "\" id=\"").concat(swalClasses.select, "\"></select>\n <div class=\"").concat(swalClasses.radio, "\"></div>\n <label class=\"").concat(swalClasses.checkbox, "\">\n <input type=\"checkbox\" id=\"").concat(swalClasses.checkbox, "\" />\n <span class=\"").concat(swalClasses.label, "\"></span>\n </label>\n <textarea class=\"").concat(swalClasses.textarea, "\" id=\"").concat(swalClasses.textarea, "\"></textarea>\n <div class=\"").concat(swalClasses['validation-message'], "\" id=\"").concat(swalClasses['validation-message'], "\"></div>\n <div class=\"").concat(swalClasses.actions, "\">\n <div class=\"").concat(swalClasses.loader, "\"></div>\n <button type=\"button\" class=\"").concat(swalClasses.confirm, "\"></button>\n <button type=\"button\" class=\"").concat(swalClasses.deny, "\"></button>\n <button type=\"button\" class=\"").concat(swalClasses.cancel, "\"></button>\n </div>\n <div class=\"").concat(swalClasses.footer, "\"></div>\n <div class=\"").concat(swalClasses['timer-progress-bar-container'], "\">\n <div class=\"").concat(swalClasses['timer-progress-bar'], "\"></div>\n </div>\n </div>\n").replace(/(^|\n)\s*/g, '');
/**
* @returns {boolean}
*/
var resetOldContainer = function resetOldContainer() {
var oldContainer = getContainer();
if (!oldContainer) {
return false;
}
oldContainer.remove();
removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);
return true;
};
var resetValidationMessage$1 = function resetValidationMessage() {
globalState.currentInstance.resetValidationMessage();
};
var addInputChangeListeners = function addInputChangeListeners() {
var popup = getPopup();
var input = getDirectChildByClass(popup, swalClasses.input);
var file = getDirectChildByClass(popup, swalClasses.file);
/** @type {HTMLInputElement} */
var range = popup.querySelector(".".concat(swalClasses.range, " input"));
/** @type {HTMLOutputElement} */
var rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output"));
var select = getDirectChildByClass(popup, swalClasses.select);
/** @type {HTMLInputElement} */
var checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input"));
var textarea = getDirectChildByClass(popup, swalClasses.textarea);
input.oninput = resetValidationMessage$1;
file.onchange = resetValidationMessage$1;
select.onchange = resetValidationMessage$1;
checkbox.onchange = resetValidationMessage$1;
textarea.oninput = resetValidationMessage$1;
range.oninput = function () {
resetValidationMessage$1();
rangeOutput.value = range.value;
};
range.onchange = function () {
resetValidationMessage$1();
rangeOutput.value = range.value;
};
};
/**
* @param {string | HTMLElement} target
* @returns {HTMLElement}
*/
var getTarget = function getTarget(target) {
return typeof target === 'string' ? document.querySelector(target) : target;
};
/**
* @param {SweetAlertOptions} params
*/
var setupAccessibility = function setupAccessibility(params) {
var 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');
}
};
/**
* @param {HTMLElement} targetElement
*/
var setupRTL = function setupRTL(targetElement) {
if (window.getComputedStyle(targetElement).direction === 'rtl') {
addClass(getContainer(), swalClasses.rtl);
}
};
/**
* Add modal + backdrop + no-war message for Russians to DOM
*
* @param {SweetAlertOptions} params
*/
var init = function init(params) {
// Clean up the old popup container if it exists
var oldContainerExisted = resetOldContainer();
if (isNodeEnv()) {
error('SweetAlert2 requires document to initialize');
return;
}
var container = document.createElement('div');
container.className = swalClasses.container;
if (oldContainerExisted) {
addClass(container, swalClasses['no-transition']);
}
setInnerHtml(container, sweetHTML);
var targetElement = getTarget(params.target);
targetElement.appendChild(container);
setupAccessibility(params);
setupRTL(targetElement);
addInputChangeListeners();
};
/**
* @param {HTMLElement | object | string} param
* @param {HTMLElement} target
*/
var parseHtmlToContainer = function 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);
}
};
/**
* @param {any} param
* @param {HTMLElement} target
*/
var handleObject = function handleObject(param, target) {
// JQuery element(s)
if (param.jquery) {
handleJqueryElem(target, param);
}
// For other objects use their string representation
else {
setInnerHtml(target, param.toString());
}
};
/**
* @param {HTMLElement} target
* @param {any} elem
*/
var handleJqueryElem = function handleJqueryElem(target, elem) {
target.textContent = '';
if (0 in elem) {
for (var i = 0; (i in elem); i++) {
target.appendChild(elem[i].cloneNode(true));
}
} else {
target.appendChild(elem.cloneNode(true));
}
};
/**
* @returns {'webkitAnimationEnd' | 'animationend' | false}
*/
var animationEndEvent = function () {
// Prevent run in Node env
if (isNodeEnv()) {
return false;
}
var testEl = document.createElement('div');
// Chrome, Safari and Opera
if (typeof testEl.style.webkitAnimation !== 'undefined') {
return 'webkitAnimationEnd';
}
// Standard syntax
if (typeof testEl.style.animation !== 'undefined') {
return 'animationend';
}
return false;
}();
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderActions = function renderActions(instance, params) {
var actions = getActions();
var loader = getLoader();
if (!actions || !loader) {
return;
}
// Actions (buttons) wrapper
if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {
hide(actions);
} else {
show(actions);
}
// Custom class
applyCustomClass(actions, params, 'actions');
// Render all the buttons
renderButtons(actions, loader, params);
// Loader
setInnerHtml(loader, params.loaderHtml || '');
applyCustomClass(loader, params, 'loader');
};
/**
* @param {HTMLElement} actions
* @param {HTMLElement} loader
* @param {SweetAlertOptions} params
*/
function renderButtons(actions, loader, params) {
var confirmButton = getConfirmButton();
var denyButton = getDenyButton();
var cancelButton = getCancelButton();
if (!confirmButton || !denyButton || !cancelButton) {
return;
}
// Render buttons
renderButton(confirmButton, 'confirm', params);
renderButton(denyButton, 'deny', params);
renderButton(cancelButton, 'cancel', params);
handleButtonsStyling(confirmButton, denyButton, cancelButton, params);
if (params.reverseButtons) {
if (params.toast) {
actions.insertBefore(cancelButton, confirmButton);
actions.insertBefore(denyButton, confirmButton);
} else {
actions.insertBefore(cancelButton, loader);
actions.insertBefore(denyButton, loader);
actions.insertBefore(confirmButton, loader);
}
}
}
/**
* @param {HTMLElement} confirmButton
* @param {HTMLElement} denyButton
* @param {HTMLElement} cancelButton
* @param {SweetAlertOptions} params
*/
function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {
if (!params.buttonsStyling) {
removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);
return;
}
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']);
}
}
/**
* @param {HTMLElement} button
* @param {'confirm' | 'deny' | 'cancel'} buttonType
* @param {SweetAlertOptions} params
*/
function renderButton(button, buttonType, params) {
var buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType);
toggle(button, params["show".concat(buttonName, "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"));
}
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderCloseButton = function renderCloseButton(instance, params) {
var closeButton = getCloseButton();
if (!closeButton) {
return;
}
setInnerHtml(closeButton, params.closeButtonHtml || '');
// Custom class
applyCustomClass(closeButton, params, 'closeButton');
toggle(closeButton, params.showCloseButton);
closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderContainer = function renderContainer(instance, params) {
var container = getContainer();
if (!container) {
return;
}
handleBackdropParam(container, params.backdrop);
handlePositionParam(container, params.position);
handleGrowParam(container, params.grow);
// Custom class
applyCustomClass(container, params, 'container');
};
/**
* @param {HTMLElement} container
* @param {SweetAlertOptions['backdrop']} backdrop
*/
function handleBackdropParam(container, backdrop) {
if (typeof backdrop === 'string') {
container.style.background = backdrop;
} else if (!backdrop) {
addClass([document.documentElement, document.body], swalClasses['no-backdrop']);
}
}
/**
* @param {HTMLElement} container
* @param {SweetAlertOptions['position']} position
*/
function handlePositionParam(container, position) {
if (!position) {
return;
}
if (position in swalClasses) {
addClass(container, swalClasses[position]);
} else {
warn('The "position" parameter is not valid, defaulting to "center"');
addClass(container, swalClasses.center);
}
}
/**
* @param {HTMLElement} container
* @param {SweetAlertOptions['grow']} grow
*/
function handleGrowParam(container, grow) {
if (!grow) {
return;
}
addClass(container, swalClasses["grow-".concat(grow)]);
}
/**
* This module contains `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 = {
innerParams: new WeakMap(),
domCache: new WeakMap()
};
/** @type {InputClass[]} */
var inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderInput = function renderInput(instance, params) {
var popup = getPopup();
if (!popup) {
return;
}
var innerParams = privateProps.innerParams.get(instance);
var rerender = !innerParams || params.input !== innerParams.input;
inputClasses.forEach(function (inputClass) {
var inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);
if (!inputContainer) {
return;
}
// set attributes
setAttributes(inputClass, params.inputAttributes);
// set class
inputContainer.className = swalClasses[inputClass];
if (rerender) {
hide(inputContainer);
}
});
if (params.input) {
if (rerender) {
showInput(params);
}
// set custom class
setCustomClass(params);
}
};
/**
* @param {SweetAlertOptions} params
*/
var showInput = function showInput(params) {
if (!params.input) {
return;
}
if (!renderInputType[params.input]) {
error("Unexpected type of input! Expected ".concat(Object.keys(renderInputType).join(' | '), ", got \"").concat(params.input, "\""));
return;
}
var inputContainer = getInputContainer(params.input);
var input = renderInputType[params.input](inputContainer, params);
show(inputContainer);
// input autofocus
if (params.inputAutoFocus) {
setTimeout(function () {
focusInput(input);
});
}
};
/**
* @param {HTMLInputElement} input
*/
var removeAttributes = function removeAttributes(input) {
for (var i = 0; i < input.attributes.length; i++) {
var attrName = input.attributes[i].name;
if (!['id', 'type', 'value', 'style'].includes(attrName)) {
input.removeAttribute(attrName);
}
}
};
/**
* @param {InputClass} inputClass
* @param {SweetAlertOptions['inputAttributes']} inputAttributes
*/
var setAttributes = function setAttributes(inputClass, inputAttributes) {
var input = getInput$1(getPopup(), inputClass);
if (!input) {
return;
}
removeAttributes(input);
for (var attr in inputAttributes) {
input.setAttribute(attr, inputAttributes[attr]);
}
};
/**
* @param {SweetAlertOptions} params
*/
var setCustomClass = function setCustomClass(params) {
var inputContainer = getInputContainer(params.input);
if (_typeof(params.customClass) === 'object') {
addClass(inputContainer, params.customClass.input);
}
};
/**
* @param {HTMLInputElement | HTMLTextAreaElement} input
* @param {SweetAlertOptions} params
*/
var setInputPlaceholder = function setInputPlaceholder(input, params) {
if (!input.placeholder || params.inputPlaceholder) {
input.placeholder = params.inputPlaceholder;
}
};
/**
* @param {Input} input
* @param {Input} prependTo
* @param {SweetAlertOptions} params
*/
var setInputLabel = function setInputLabel(input, prependTo, params) {
if (params.inputLabel) {
var label = document.createElement('label');
var labelClass = swalClasses['input-label'];
label.setAttribute('for', input.id);
label.className = labelClass;
if (_typeof(params.customClass) === 'object') {
addClass(label, params.customClass.inputLabel);
}
label.innerText = params.inputLabel;
prependTo.insertAdjacentElement('beforebegin', label);
}
};
/**
* @param {SweetAlertOptions['input']} inputType
* @returns {HTMLElement}
*/
var getInputContainer = function getInputContainer(inputType) {
return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);
};
/**
* @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input
* @param {SweetAlertOptions['inputValue']} inputValue
*/
var checkAndSetInputValue = function checkAndSetInputValue(input, inputValue) {
if (['string', 'number'].includes(_typeof(inputValue))) {
input.value = "".concat(inputValue);
} else if (!isPromise(inputValue)) {
warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(_typeof(inputValue), "\""));
}
};
/** @type {Record<SweetAlertInput, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */
var renderInputType = {};
/**
* @param {HTMLInputElement} input
* @param {SweetAlertOptions} params
* @returns {HTMLInputElement}
*/
renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = function (input, params) {
checkAndSetInputValue(input, params.inputValue);
setInputLabel(input, input, params);
setInputPlaceholder(input, params);
input.type = params.input;
return input;
};
/**
* @param {HTMLInputElement} input
* @param {SweetAlertOptions} params
* @returns {HTMLInputElement}
*/
renderInputType.file = function (input, params) {
setInputLabel(input, input, params);
setInputPlaceholder(input, params);
return input;
};
/**
* @param {HTMLInputElement} range
* @param {SweetAlertOptions} params
* @returns {HTMLInputElement}
*/
renderInputType.range = function (range, params) {
var rangeInput = range.querySelector('input');
var rangeOutput = range.querySelector('output');
checkAndSetInputValue(rangeInput, params.inputValue);
rangeInput.type = params.input;
checkAndSetInputValue(rangeOutput, params.inputValue);
setInputLabel(rangeInput, range, params);
return range;
};
/**
* @param {HTMLSelectElement} select
* @param {SweetAlertOptions} params
* @returns {HTMLSelectElement}
*/
renderInputType.select = function (select, params) {
select.textContent = '';
if (params.inputPlaceholder) {
var 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;
};
/**
* @param {HTMLInputElement} radio
* @returns {HTMLInputElement}
*/
renderInputType.radio = function (radio) {
radio.textContent = '';
return radio;
};
/**
* @param {HTMLLabelElement} checkboxContainer
* @param {SweetAlertOptions} params
* @returns {HTMLInputElement}
*/
renderInputType.checkbox = function (checkboxContainer, params) {
var checkbox = getInput$1(getPopup(), 'checkbox');
checkbox.value = '1';
checkbox.checked = Boolean(params.inputValue);
var label = checkboxContainer.querySelector('span');
setInnerHtml(label, params.inputPlaceholder);
return checkbox;
};
/**
* @param {HTMLTextAreaElement} textarea
* @param {SweetAlertOptions} params
* @returns {HTMLTextAreaElement}
*/
renderInputType.textarea = function (textarea, params) {
checkAndSetInputValue(textarea, params.inputValue);
setInputPlaceholder(textarea, params);
setInputLabel(textarea, textarea, params);
/**
* @param {HTMLElement} el
* @returns {number}
*/
var getMargin = function getMargin(el) {
return parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);
};
// https://github.com/sweetalert2/sweetalert2/issues/2291
setTimeout(function () {
// https://github.com/sweetalert2/sweetalert2/issues/1699
if ('MutationObserver' in window) {
var initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);
var textareaResizeHandler = function textareaResizeHandler() {
// check if texarea is still in document (i.e. popup wasn't closed in the meantime)
if (!document.body.contains(textarea)) {
return;
}
var textareaWidth = textarea.offsetWidth + getMargin(textarea);
if (textareaWidth > initialPopupWidth) {
getPopup().style.width = "".concat(textareaWidth, "px");
} else {
applyNumericalStyle(getPopup(), 'width', params.width);
}
};
new MutationObserver(textareaResizeHandler).observe(textarea, {
attributes: true,
attributeFilter: ['style']
});
}
});
return textarea;
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderContent = function renderContent(instance, params) {
var htmlContainer = getHtmlContainer();
if (!htmlContainer) {
return;
}
showWhenInnerHtmlPresent(htmlContainer);
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);
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderFooter = function renderFooter(instance, params) {
var footer = getFooter();
if (!footer) {
return;
}
showWhenInnerHtmlPresent(footer);
toggle(footer, params.footer, 'block');
if (params.footer) {
parseHtmlToContainer(params.footer, footer);
}
// Custom class
applyCustomClass(footer, params, 'footer');
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderIcon = function renderIcon(instance, params) {
var innerParams = privateProps.innerParams.get(instance);
var icon = getIcon();
if (!icon) {
return;
}
// 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) {
hide(icon);
return;
}
if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {
error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\""));
hide(icon);
return;
}
show(icon);
// Custom or default content
setContent(icon, params);
applyStyles(icon, params);
// Animate icon
addClass(icon, params.showClass && params.showClass.icon);
};
/**
* @param {HTMLElement} icon
* @param {SweetAlertOptions} params
*/
var applyStyles = function applyStyles(icon, params) {
for (var _i = 0, _Object$entries = Object.entries(iconTypes); _i < _Object$entries.length; _i++) {
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
iconType = _Object$entries$_i[0],
iconClassName = _Object$entries$_i[1];
if (params.icon !== iconType) {
removeClass(icon, iconClassName);
}
}
addClass(icon, params.icon && iconTypes[params.icon]);
// Icon color
setColor(icon, params);
// Success icon background color
adjustSuccessIconBackgroundColor();
// Custom class
applyCustomClass(icon, params, 'icon');
};
// Adjust success icon background color to match the popup background color
var adjustSuccessIconBackgroundColor = function adjustSuccessIconBackgroundColor() {
var popup = getPopup();
if (!popup) {
return;
}
var popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');
/** @type {NodeListOf<HTMLElement>} */
var successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');
for (var i = 0; i < successIconParts.length; i++) {
successIconParts[i].style.backgroundColor = popupBackgroundColor;
}
};
var successIconHtml = "\n <div class=\"swal2-success-circular-line-left\"></div>\n <span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span>\n <div class=\"swal2-success-ring\"></div> <div class=\"swal2-success-fix\"></div>\n <div class=\"swal2-success-circular-line-right\"></div>\n";
var errorIconHtml = "\n <span class=\"swal2-x-mark\">\n <span class=\"swal2-x-mark-line-left\"></span>\n <span class=\"swal2-x-mark-line-right\"></span>\n </span>\n";
/**
* @param {HTMLElement} icon
* @param {SweetAlertOptions} params
*/
var setContent = function setContent(icon, params) {
if (!params.icon && !params.iconHtml) {
return;
}
var oldContent = icon.innerHTML;
var newContent = '';
if (params.iconHtml) {
newContent = iconContent(params.iconHtml);
} else if (params.icon === 'success') {
newContent = successIconHtml;
oldContent = oldContent.replace(/ style=".*?"/g, ''); // undo adjustSuccessIconBackgroundColor()
} else if (params.icon === 'error') {
newContent = errorIconHtml;
} else if (params.icon) {
var defaultIconHtml = {
question: '?',
warning: '!',
info: 'i'
};
newContent = iconContent(defaultIconHtml[params.icon]);
}
if (oldContent.trim() !== newContent.trim()) {
setInnerHtml(icon, newContent);
}
};
/**
* @param {HTMLElement} icon
* @param {SweetAlertOptions} params
*/
var setColor = function setColor(icon, params) {
if (!params.iconColor) {
return;
}
icon.style.color = params.iconColor;
icon.style.borderColor = params.iconColor;
for (var _i2 = 0, _arr = ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']; _i2 < _arr.length; _i2++) {
var sel = _arr[_i2];
setStyle(icon, sel, 'background-color', params.iconColor);
}
setStyle(icon, '.swal2-success-ring', 'border-color', params.iconColor);
};
/**
* @param {string} content
* @returns {string}
*/
var iconContent = function iconContent(content) {
return "<div class=\"".concat(swalClasses['icon-content'], "\">").concat(content, "</div>");
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderImage = function renderImage(instance, params) {
var image = getImage();
if (!image) {
return;
}
if (!params.imageUrl) {
hide(image);
return;
}
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');
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderPopup = function renderPopup(instance, params) {
var container = getContainer();
var popup = getPopup();
if (!container || !popup) {
return;
}
// Width
// https://github.com/sweetalert2/sweetalert2/issues/2170
if (params.toast) {
applyNumericalStyle(container, 'width', params.width);
popup.style.width = '100%';
var loader = getLoader();
loader && popup.insertBefore(loader, getIcon());
} else {
applyNumericalStyle(popup, 'width', params.width);
}
// Padding
applyNumericalStyle(popup, 'padding', params.padding);
// Color
if (params.color) {
popup.style.color = params.color;
}
// Background
if (params.background) {
popup.style.background = params.background;
}
hide(getValidationMessage());
// Classes
addClasses$1(popup, params);
};
/**
* @param {HTMLElement} popup
* @param {SweetAlertOptions} params
*/
var addClasses$1 = function addClasses(popup, params) {
var showClass = params.showClass || {};
// Default Class + showClass when updating Swal.update({})
popup.className = "".concat(swalClasses.popup, " ").concat(isVisible$1(popup) ? 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)]);
}
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderProgressSteps = function renderProgressSteps(instance, params) {
var progressStepsContainer = getProgressSteps();
if (!progressStepsContainer) {
return;
}
var progressSteps = params.progressSteps,
currentProgressStep = params.currentProgressStep;
if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {
hide(progressStepsContainer);
return;
}
show(progressStepsContainer);
progressStepsContainer.textContent = '';
if (currentProgressStep >= progressSteps.length) {
warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
}
progressSteps.forEach(function (step, index) {
var stepEl = createStepElement(step);
progressStepsContainer.appendChild(stepEl);
if (index === currentProgressStep) {
addClass(stepEl, swalClasses['active-progress-step']);
}
if (index !== progressSteps.length - 1) {
var lineEl = createLineElement(params);
progressStepsContainer.appendChild(lineEl);
}
});
};
/**
* @param {string} step
* @returns {HTMLLIElement}
*/
var createStepElement = function createStepElement(step) {
var stepEl = document.createElement('li');
addClass(stepEl, swalClasses['progress-step']);
setInnerHtml(stepEl, step);
return stepEl;
};
/**
* @param {SweetAlertOptions} params
* @returns {HTMLLIElement}
*/
var createLineElement = function createLineElement(params) {
var lineEl = document.createElement('li');
addClass(lineEl, swalClasses['progress-step-line']);
if (params.progressStepsDistance) {
applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);
}
return lineEl;
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var renderTitle = function renderTitle(instance, params) {
var title = getTitle();
if (!title) {
return;
}
showWhenInnerHtmlPresent(title);
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');
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var render = function 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);
var popup = getPopup();
if (typeof params.didRender === 'function' && popup) {
params.didRender(popup);
}
};
/*
* Global function to determine if SweetAlert2 popup is shown
*/
var isVisible = function isVisible() {
return isVisible$1(getPopup());
};
/*
* Global function to click 'Confirm' button
*/
var clickConfirm = function clickConfirm() {
var _dom$getConfirmButton;
return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click();
};
/*
* Global function to click 'Deny' button
*/
var clickDeny = function clickDeny() {
var _dom$getDenyButton;
return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click();
};
/*
* Global function to click 'Cancel' button
*/
var clickCancel = function clickCancel() {
var _dom$getCancelButton;
return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();
};
/** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason */
/** @type {Record<DismissReason, DismissReason>} */
var DismissReason = Object.freeze({
cancel: 'cancel',
backdrop: 'backdrop',
close: 'close',
esc: 'esc',
timer: 'timer'
});
/**
* @param {GlobalState} globalState
*/
var removeKeydownHandler = function removeKeydownHandler(globalState) {
if (globalState.keydownTarget && globalState.keydownHandlerAdded) {
globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {
capture: globalState.keydownListenerCapture
});
globalState.keydownHandlerAdded = false;
}
};
/**
* @param {GlobalState} globalState
* @param {SweetAlertOptions} innerParams
* @param {*} dismissWith
*/
var addKeydownHandler = function addKeydownHandler(globalState, innerParams, dismissWith) {
removeKeydownHandler(globalState);
if (!innerParams.toast) {
globalState.keydownHandler = function (e) {
return keydownHandler(innerParams, e, dismissWith);
};
globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();
globalState.keydownListenerCapture = innerParams.keydownListenerCapture;
globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {
capture: globalState.keydownListenerCapture
});
globalState.keydownHandlerAdded = true;
}
};
/**
* @param {number} index
* @param {number} increment
*/
var setFocus = function setFocus(index, increment) {
var _dom$getPopup;
var 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;
}
focusableElements[index].focus();
return;
}
// no visible focusable elements, focus the popup
(_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus();
};
var arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];
var arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];
/**
* @param {SweetAlertOptions} innerParams
* @param {KeyboardEvent} event
* @param {Function} dismissWith
*/
var keydownHandler = function keydownHandler(innerParams, event, dismissWith) {
if (!innerParams) {
return; // This instance has already been destroyed
}
// Ignore keydown during IME composition
// https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition
// https://github.com/sweetalert2/sweetalert2/issues/720
// https://github.com/sweetalert2/sweetalert2/issues/2406
if (event.isComposing || event.keyCode === 229) {
return;
}
if (innerParams.stopKeydownPropagation) {
event.stopPropagation();
}
// ENTER
if (event.key === 'Enter') {
handleEnter(event, innerParams);
}
// TAB
else if (event.key === 'Tab') {
handleTab(event);
}
// ARROWS - switch focus between buttons
else if ([].concat(arrowKeysNextButton, arrowKeysPreviousButton).includes(event.key)) {
handleArrows(event.key);
}
// ESC
else if (event.key === 'Escape') {
handleEsc(event, innerParams, dismissWith);
}
};
/**
* @param {KeyboardEvent} event
* @param {SweetAlertOptions} innerParams
*/
var handleEnter = function handleEnter(event, innerParams) {
// https://github.com/sweetalert2/sweetalert2/issues/2386
if (!callIfFunction(innerParams.allowEnterKey)) {
return;
}
var input = getInput$1(getPopup(), innerParams.input);
if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {
if (['textarea', 'file'].includes(innerParams.input)) {
return; // do not submit
}
clickConfirm();
event.preventDefault();
}
};
/**
* @param {KeyboardEvent} event
*/
var handleTab = function handleTab(event) {
var targetElement = event.target;
var focusableElements = getFocusableElements();
var btnIndex = -1;
for (var i = 0; i < focusableElements.length; i++) {
if (targetElement === focusableElements[i]) {
btnIndex = i;
break;
}
}
// Cycle to the next button
if (!event.shiftKey) {
setFocus(btnIndex, 1);
}
// Cycle to the prev button
else {
setFocus(btnIndex, -1);
}
event.stopPropagation();
event.preventDefault();
};
/**
* @param {string} key
*/
var handleArrows = function handleArrows(key) {
var actions = getActions();
var confirmButton = getConfirmButton();
var denyButton = getDenyButton();
var cancelButton = getCancelButton();
if (!actions || !confirmButton || !denyButton || !cancelButton) {
return;
}
/** @type HTMLElement[] */
var buttons = [confirmButton, denyButton, cancelButton];
if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {
return;
}
var sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';
var buttonToFocus = document.activeElement;
if (!buttonToFocus) {
return;
}
for (var i = 0; i < actions.children.length; i++) {
buttonToFocus = buttonToFocus[sibling];
if (!buttonToFocus) {
return;
}
if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {
break;
}
}
if (buttonToFocus instanceof HTMLButtonElement) {
buttonToFocus.focus();
}
};
/**
* @param {KeyboardEvent} event
* @param {SweetAlertOptions} innerParams
* @param {Function} dismissWith
*/
var handleEsc = function handleEsc(event, innerParams, dismissWith) {
if (callIfFunction(innerParams.allowEscapeKey)) {
event.preventDefault();
dismissWith(DismissReason.esc);
}
};
/**
* This module contains `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(),
swalPromiseReject: new WeakMap()
};
// From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/
// 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
// readers list of elements (headings, form controls, landmarks, etc.) in the document.
var setAriaHidden = function setAriaHidden() {
var container = getContainer();
var bodyChildren = Array.from(document.body.children);
bodyChildren.forEach(function (el) {
if (el.contains(container)) {
return;
}
if (el.hasAttribute('aria-hidden')) {
el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');
}
el.setAttribute('aria-hidden', 'true');
});
};
var unsetAriaHidden = function unsetAriaHidden() {
var bodyChildren = Array.from(document.body.children);
bodyChildren.forEach(function (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');
}
});
};
// @ts-ignore
var isSafariOrIOS = typeof window !== 'undefined' && !!window.GestureEvent; // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394
/**
* Fix iOS scrolling
* http://stackoverflow.com/q/39626302
*/
var iOSfix = function iOSfix() {
if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) {
var offset = document.body.scrollTop;
document.body.style.top = "".concat(offset * -1, "px");
addClass(document.body, swalClasses.iosfix);
lockBodyScroll();
}
};
/**
* https://github.com/sweetalert2/sweetalert2/issues/1246
*/
var lockBodyScroll = function lockBodyScroll() {
var container = getContainer();
if (!container) {
return;
}
/** @type {boolean} */
var preventTouchMove;
/**
* @param {TouchEvent} event
*/
container.ontouchstart = function (event) {
preventTouchMove = shouldPreventTouchMove(event);
};
/**
* @param {TouchEvent} event
*/
container.ontouchmove = function (event) {
if (preventTouchMove) {
event.preventDefault();
event.stopPropagation();
}
};
};
/**
* @param {TouchEvent} event
* @returns {boolean}
*/
var shouldPreventTouchMove = function shouldPreventTouchMove(event) {
var target = event.target;
var container = getContainer();
var htmlContainer = getHtmlContainer();
if (!container || !htmlContainer) {
return false;
}
if (isStylus(event) || isZoom(event)) {
return false;
}
if (target === container) {
return true;
}
if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== 'INPUT' &&
// #1603
target.tagName !== 'TEXTAREA' &&
// #2266
!(isScrollable(htmlContainer) &&
// #1944
htmlContainer.contains(target))) {
return true;
}
return false;
};
/**
* https://github.com/sweetalert2/sweetalert2/issues/1786
*
* @param {*} event
* @returns {boolean}
*/
var isStylus = function isStylus(event) {
return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';
};
/**
* https://github.com/sweetalert2/sweetalert2/issues/1891
*
* @param {TouchEvent} event
* @returns {boolean}
*/
var isZoom = function isZoom(event) {
return event.touches && event.touches.length > 1;
};
var undoIOSfix = function undoIOSfix() {
if (hasClass(document.body, swalClasses.iosfix)) {
var offset = parseInt(document.body.style.top, 10);
removeClass(document.body, swalClasses.iosfix);
document.body.style.top = '';
document.body.scrollTop = offset * -1;
}
};
/**
* Measure scrollbar width for padding body during modal show/hide
* https://github.com/twbs/bootstrap/blob/master/js/src/modal.js
*
* @returns {number}
*/
var measureScrollbar = function measureScrollbar() {
var scrollDiv = document.createElement('div');
scrollDiv.className = swalClasses['scrollbar-measure'];
document.body.appendChild(scrollDiv);
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
};
/**
* Remember state in cases where opening and handling a modal will fiddle with it.
* @type {number | null}
*/
var previousBodyPadding = null;
/**
* @param {string} initialBodyOverflow
*/
var replaceScrollbarWithPadding = function replaceScrollbarWithPadding(initialBodyOverflow) {
// for queues, do not do this more than once
if (previousBodyPadding !== null) {
return;
}
// if the body has overflow
if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663
) {
// add padding so the content doesn't shift after removal of scrollbar
previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));
document.body.style.paddingRight = "".concat(previousBodyPadding + measureScrollbar(), "px");
}
};
var undoReplaceScrollbarWithPadding = function undoReplaceScrollbarWithPadding() {
if (previousBodyPadding !== null) {
document.body.style.paddingRight = "".concat(previousBodyPadding, "px");
previousBodyPadding = null;
}
};
/**
* @param {SweetAlert} instance
* @param {HTMLElement} container
* @param {boolean} returnFocus
* @param {Function} didClose
*/
function removePopupAndResetState(instance, container, returnFocus, didClose) {
if (isToast()) {
triggerDidCloseAndDispose(instance, didClose);
} else {
restoreActiveElement(returnFocus).then(function () {
return triggerDidCloseAndDispose(instance, didClose);
});
removeKeydownHandler(globalState);
}
// workaround for https://github.com/sweetalert2/sweetalert2/issues/2088
// for some reason removing the container in Safari will scroll the document to bottom
if (isSafariOrIOS) {
container.setAttribute('style', 'display:none !important');
container.removeAttribute('class');
container.innerHTML = '';
} else {
container.remove();
}
if (isModal()) {
undoReplaceScrollbarWithPadding();
undoIOSfix();
unsetAriaHidden();
}
removeBodyClasses();
}
/**
* Remove SweetAlert2 classes from body
*/
function removeBodyClasses() {
removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);
}
/**
* Instance method to close sweetAlert
*
* @param {any} resolveValue
*/
function close(resolveValue) {
resolveValue = prepareResolveValue(resolveValue);
var swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);
var didClose = triggerClosePopup(this);
if (this.isAwaitingPromise) {
// A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335
if (!resolveValue.isDismissed) {
handleAwaitingPromise(this);
swalPromiseResolve(resolveValue);
}
} else if (didClose) {
// Resolve Swal promise
swalPromiseResolve(resolveValue);
}
}
var triggerClosePopup = function triggerClosePopup(instance) {
var popup = getPopup();
if (!popup) {
return false;
}
var innerParams = privateProps.innerParams.get(instance);
if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {
return false;
}
removeClass(popup, innerParams.showClass.popup);
addClass(popup, innerParams.hideClass.popup);
var backdrop = getContainer();
removeClass(backdrop, innerParams.showClass.backdrop);
addClass(backdrop, innerParams.hideClass.backdrop);
handlePopupAnimation(instance, popup, innerParams);
return true;
};
/**
* @param {any} error
*/
function rejectPromise(error) {
var rejectPromise = privateMethods.swalPromiseReject.get(this);
handleAwaitingPromise(this);
if (rejectPromise) {
// Reject Swal promise
rejectPromise(error);
}
}
/**
* @param {SweetAlert} instance
*/
var handleAwaitingPromise = function handleAwaitingPromise(instance) {
if (instance.isAwaitingPromise) {
delete instance.isAwaitingPromise;
// The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335
if (!privateProps.innerParams.get(instance)) {
instance._destroy();
}
}
};
/**
* @param {any} resolveValue
* @returns {SweetAlertResult}
*/
var prepareResolveValue = function 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);
};
/**
* @param {SweetAlert} instance
* @param {HTMLElement} popup
* @param {SweetAlertOptions} innerParams
*/
var handlePopupAnimation = function handlePopupAnimation(instance, popup, innerParams) {
var container = getContainer();
// If animation is supported, animate
var 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);
}
};
/**
* @param {SweetAlert} instance
* @param {HTMLElement} popup
* @param {HTMLElement} container
* @param {boolean} returnFocus
* @param {Function} didClose
*/
var animatePopup = function animatePopup(instance, popup, container, returnFocus, didClose) {
if (!animationEndEvent) {
return;
}
globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);
popup.addEventListener(animationEndEvent, function (e) {
if (e.target === popup) {
globalState.swalCloseEventFinishedCallback();
delete globalState.swalCloseEventFinishedCallback;
}
});
};
/**
* @param {SweetAlert} instance
* @param {Function} didClose
*/
var triggerDidCloseAndDispose = function triggerDidCloseAndDispose(instance, didClose) {
setTimeout(function () {
if (typeof didClose === 'function') {
didClose.bind(instance.params)();
}
// instance might have been destroyed already
if (instance._destroy) {
instance._destroy();
}
});
};
/**
* Shows loader (spinner), this is useful with AJAX requests.
* By default the loader be shown instead of the "Confirm" button.
*
* @param {HTMLButtonElement | null} [buttonToReplace]
*/
var showLoading = function showLoading(buttonToReplace) {
var popup = getPopup();
if (!popup) {
new Swal(); // eslint-disable-line no-new
}
popup = getPopup();
if (!popup) {
return;
}
var loader = getLoader();
if (isToast()) {
hide(getIcon());
} else {
replaceButton(popup, buttonToReplace);
}
show(loader);
popup.setAttribute('data-loading', 'true');
popup.setAttribute('aria-busy', 'true');
popup.focus();
};
/**
* @param {HTMLElement} popup
* @param {HTMLButtonElement | null} [buttonToReplace]
*/
var replaceButton = function replaceButton(popup, buttonToReplace) {
var actions = getActions();
var loader = getLoader();
if (!actions || !loader) {
return;
}
if (!buttonToReplace && isVisible$1(getConfirmButton())) {
buttonToReplace = getConfirmButton();
}
show(actions);
if (buttonToReplace) {
hide(buttonToReplace);
loader.setAttribute('data-button-to-replace', buttonToReplace.className);
actions.insertBefore(loader, buttonToReplace);
}
addClass([popup, actions], swalClasses.loading);
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var handleInputOptionsAndValue = function handleInputOptionsAndValue(instance, params) {
if (params.input === 'select' || params.input === 'radio') {
handleInputOptions(instance, params);
} else if (['text', 'email', 'number', 'tel', 'textarea'].some(function (i) {
return i === params.input;
}) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {
showLoading(getConfirmButton());
handleInputValue(instance, params);
}
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} innerParams
* @returns {SweetAlertInputValue}
*/
var getInputValue = function getInputValue(instance, innerParams) {
var 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;
}
};
/**
* @param {HTMLInputElement} input
* @returns {number}
*/
var getCheckboxValue = function getCheckboxValue(input) {
return input.checked ? 1 : 0;
};
/**
* @param {HTMLInputElement} input
* @returns {string | null}
*/
var getRadioValue = function getRadioValue(input) {
return input.checked ? input.value : null;
};
/**
* @param {HTMLInputElement} input
* @returns {FileList | File | null}
*/
var getFileValue = function getFileValue(input) {
return input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var handleInputOptions = function handleInputOptions(instance, params) {
var popup = getPopup();
if (!popup) {
return;
}
/**
* @param {Record<string, any>} inputOptions
*/
var processInputOptions = function processInputOptions(inputOptions) {
if (params.input === 'select') {
populateSelectOptions(popup, formatInputOptions(inputOptions), params);
} else if (params.input === 'radio') {
populateRadioOptions(popup, formatInputOptions(inputOptions), params);
}
};
if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {
showLoading(getConfirmButton());
asPromise(params.inputOptions).then(function (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)));
}
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
var handleInputValue = function handleInputValue(instance, params) {
var input = instance.getInput();
if (!input) {
return;
}
hide(input);
asPromise(params.inputValue).then(function (inputValue) {
input.value = params.input === 'number' ? "".concat(parseFloat(inputValue) || 0) : "".concat(inputValue);
show(input);
input.focus();
instance.hideLoading();
})["catch"](function (err) {
error("Error in inputValue promise: ".concat(err));
input.value = '';
show(input);
input.focus();
instance.hideLoading();
});
};
/**
* @param {HTMLElement} popup
* @param {InputOptionFlattened[]} inputOptions
* @param {SweetAlertOptions} params
*/
function populateSelectOptions(popup, inputOptions, params) {
var select = getDirectChildByClass(popup, swalClasses.select);
if (!select) {
return;
}
/**
* @param {HTMLElement} parent
* @param {string} optionLabel
* @param {string} optionValue
*/
var renderOption = function renderOption(parent, optionLabel, optionValue) {
var option = document.createElement('option');
option.value = optionValue;
setInnerHtml(option, optionLabel);
option.selected = isSelected(optionValue, params.inputValue);
parent.appendChild(option);
};
inputOptions.forEach(function (inputOption) {
var optionValue = inputOption[0];
var optionLabel = inputOption[1];
// <optgroup> 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 <optgroup>
if (Array.isArray(optionLabel)) {
// if it is an array, then it is an <optgroup>
var optgroup = document.createElement('optgroup');
optgroup.label = optionValue;
optgroup.disabled = false; // not configurable for now
select.appendChild(optgroup);
optionLabel.forEach(function (o) {
return renderOption(optgroup, o[1], o[0]);
});
} else {
// case of <option>
renderOption(select, optionLabel, optionValue);
}
});
select.focus();
}
/**
* @param {HTMLElement} popup
* @param {InputOptionFlattened[]} inputOptions
* @param {SweetAlertOptions} params
*/
function populateRadioOptions(popup, inputOptions, params) {
var radio = getDirectChildByClass(popup, swalClasses.radio);
if (!radio) {
return;
}
inputOptions.forEach(function (inputOption) {
var radioValue = inputOption[0];
var radioLabel = inputOption[1];
var radioInput = document.createElement('input');
var radioLabelElement = document.createElement('label');
radioInput.type = 'radio';
radioInput.name = swalClasses.radio;
radioInput.value = radioValue;
if (isSelected(radioValue, params.inputValue)) {
radioInput.checked = true;
}
var label = document.createElement('span');
setInnerHtml(label, radioLabel);
label.className = swalClasses.label;
radioLabelElement.appendChild(radioInput);
radioLabelElement.appendChild(label);
radio.appendChild(radioLabelElement);
});
var radios = radio.querySelectorAll('input');
if (radios.length) {
radios[0].focus();
}
}
/**
* Converts `inputOptions` into an array of `[value, label]`s
*
* @param {Record<string, any>} inputOptions
* @typedef {string[]} InputOptionFlattened
* @returns {InputOptionFlattened[]}
*/
var formatInputOptions = function formatInputOptions(inputOptions) {
/** @type {InputOptionFlattened[]} */
var result = [];
if (inputOptions instanceof Map) {
inputOptions.forEach(function (value, key) {
var valueFormatted = value;
if (_typeof(valueFormatted) === 'object') {
// case of <optgroup>
valueFormatted = formatInputOptions(valueFormatted);
}
result.push([key, valueFormatted]);
});
} else {
Object.keys(inputOptions).forEach(function (key) {
var valueFormatted = inputOptions[key];
if (_typeof(valueFormatted) === 'object') {
// case of <optgroup>
valueFormatted = formatInputOptions(valueFormatted);
}
result.push([key, valueFormatted]);
});
}
return result;
};
/**
* @param {string} optionValue
* @param {SweetAlertInputValue} inputValue
* @returns {boolean}
*/
var isSelected = function isSelected(optionValue, inputValue) {
return !!inputValue && inputValue.toString() === optionValue.toString();
};
var _this = undefined;
/**
* @param {SweetAlert} instance
*/
var handleConfirmButtonClick = function handleConfirmButtonClick(instance) {
var innerParams = privateProps.innerParams.get(instance);
instance.disableButtons();
if (innerParams.input) {
handleConfirmOrDenyWithInput(instance, 'confirm');
} else {
confirm(instance, true);
}
};
/**
* @param {SweetAlert} instance
*/
var handleDenyButtonClick = function handleDenyButtonClick(instance) {
var innerParams = privateProps.innerParams.get(instance);
instance.disableButtons();
if (innerParams.returnInputValueOnDeny) {
handleConfirmOrDenyWithInput(instance, 'deny');
} else {
deny(instance, false);
}
};
/**
* @param {SweetAlert} instance
* @param {Function} dismissWith
*/
var handleCancelButtonClick = function handleCancelButtonClick(instance, dismissWith) {
instance.disableButtons();
dismissWith(DismissReason.cancel);
};
/**
* @param {SweetAlert} instance
* @param {'confirm' | 'deny'} type
*/
var handleConfirmOrDenyWithInput = function handleConfirmOrDenyWithInput(instance, type) {
var innerParams = privateProps.innerParams.get(instance);
if (!innerParams.input) {
error("The \"input\" parameter is needed to be set when using returnInputValueOn".concat(capitalizeFirstLetter(type)));
return;
}
var input = instance.getInput();
var inputValue = getInputValue(instance, innerParams);
if (innerParams.inputValidator) {
handleInputValidator(instance, inputValue, type);
} else if (input && !input.checkValidity()) {
instance.enableButtons();
instance.showValidationMessage(innerParams.validationMessage || input.validationMessage);
} else if (type === 'deny') {
deny(instance, inputValue);
} else {
confirm(instance, inputValue);
}
};
/**
* @param {SweetAlert} instance
* @param {SweetAlertInputValue} inputValue
* @param {'confirm' | 'deny'} type
*/
var handleInputValidator = function handleInputValidator(instance, inputValue, type) {
var innerParams = privateProps.innerParams.get(instance);
instance.disableInput();
var validationPromise = Promise.resolve().then(function () {
return asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage));
});
validationPromise.then(function (validationMessage) {
instance.enableButtons();
instance.enableInput();
if (validationMessage) {
instance.showValidationMessage(validationMessage);
} else if (type === 'deny') {
deny(instance, inputValue);
} else {
confirm(instance, inputValue);
}
});
};
/**
* @param {SweetAlert} instance
* @param {any} value
*/
var deny = function deny(instance, value) {
var innerParams = privateProps.innerParams.get(instance || _this);
if (innerParams.showLoaderOnDeny) {
showLoading(getDenyButton());
}
if (innerParams.preDeny) {
instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received
var preDenyPromise = Promise.resolve().then(function () {
return asPromise(innerParams.preDeny(value, innerParams.validationMessage));
});
preDenyPromise.then(function (preDenyValue) {
if (preDenyValue === false) {
instance.hideLoading();
handleAwaitingPromise(instance);
} else {
instance.close({
isDenied: true,
value: typeof preDenyValue === 'undefined' ? value : preDenyValue
});
}
})["catch"](function (error) {
return rejectWith(instance || _this, error);
});
} else {
instance.close({
isDenied: true,
value: value
});
}
};
/**
* @param {SweetAlert} instance
* @param {any} value
*/
var succeedWith = function succeedWith(instance, value) {
instance.close({
isConfirmed: true,
value: value
});
};
/**
*
* @param {SweetAlert} instance
* @param {string} error
*/
var rejectWith = function rejectWith(instance, error) {
instance.rejectPromise(error);
};
/**
*
* @param {SweetAlert} instance
* @param {any} value
*/
var confirm = function confirm(instance, value) {
var innerParams = privateProps.innerParams.get(instance || _this);
if (innerParams.showLoaderOnConfirm) {
showLoading();
}
if (innerParams.preConfirm) {
instance.resetValidationMessage();
instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received
var preConfirmPromise = Promise.resolve().then(function () {
return asPromise(innerParams.preConfirm(value, innerParams.validationMessage));
});
preConfirmPromise.then(function (preConfirmValue) {
if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {
instance.hideLoading();
handleAwaitingPromise(instance);
} else {
succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);
}
})["catch"](function (error) {
return rejectWith(instance || _this, error);
});
} else {
succeedWith(instance, value);
}
};
/**
* Hides loader and shows back the button which was hidden by .showLoading()
*/
function hideLoading() {
// do nothing if popup is closed
var innerParams = privateProps.innerParams.get(this);
if (!innerParams) {
return;
}
var 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;
}
var showRelatedButton = function showRelatedButton(domCache) {
var 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);
}
};
/**
* Gets the input DOM node, this method works with input parameter.
*
* @returns {HTMLInputElement | null}
*/
function getInput() {
var innerParams = privateProps.innerParams.get(this);
var domCache = privateProps.domCache.get(this);
if (!domCache) {
return null;
}
return getInput$1(domCache.popup, innerParams.input);
}
/**
* @param {SweetAlert} instance
* @param {string[]} buttons
* @param {boolean} disabled
*/
function setButtonsDisabled(instance, buttons, disabled) {
var domCache = privateProps.domCache.get(instance);
buttons.forEach(function (button) {
domCache[button].disabled = disabled;
});
}
/**
* @param {HTMLInputElement | null} input
* @param {boolean} disabled
*/
function setInputDisabled(input, disabled) {
var popup = getPopup();
if (!popup || !input) {
return;
}
if (input.type === 'radio') {
/** @type {NodeListOf<HTMLInputElement>} */
var radios = popup.querySelectorAll("[name=\"".concat(swalClasses.radio, "\"]"));
for (var i = 0; i < radios.length; i++) {
radios[i].disabled = disabled;
}
} else {
input.disabled = disabled;
}
}
/**
* Enable all the buttons
* @this {SweetAlert}
*/
function enableButtons() {
setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);
}
/**
* Disable all the buttons
* @this {SweetAlert}
*/
function disableButtons() {
setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);
}
/**
* Enable the input field
* @this {SweetAlert}
*/
function enableInput() {
setInputDisabled(this.getInput(), false);
}
/**
* Disable the input field
* @this {SweetAlert}
*/
function disableInput() {
setInputDisabled(this.getInput(), true);
}
/**
* Show block with validation message
*
* @param {string} error
* @this {SweetAlert}
*/
function showValidationMessage(error) {
var domCache = privateProps.domCache.get(this);
var 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);
var 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
*
* @this {SweetAlert}
*/
function resetValidationMessage() {
var domCache = privateProps.domCache.get(this);
if (domCache.validationMessage) {
hide(domCache.validationMessage);
}
var input = this.getInput();
if (input) {
input.removeAttribute('aria-invalid');
input.removeAttribute('aria-describedby');
removeClass(input, swalClasses.inputerror);
}
}
var defaultParams = {
title: '',
titleText: '',
text: '',
html: '',
footer: '',
icon: undefined,
iconColor: undefined,
iconHtml: undefined,
template: undefined,
toast: false,
animation: true,
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',
color: undefined,
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: '&times;',
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: {},
inputAutoFocus: true,
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
};
var updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', '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'];
/** @type {Record<string, string>} */
var deprecatedParams = {};
var toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];
/**
* Is valid parameter
*
* @param {string} paramName
* @returns {boolean}
*/
var isValidParameter = function isValidParameter(paramName) {
return Object.prototype.hasOwnProperty.call(defaultParams, paramName);
};
/**
* Is valid parameter for Swal.update() method
*
* @param {string} paramName
* @returns {boolean}
*/
var isUpdatableParameter = function isUpdatableParameter(paramName) {
return updatableParams.indexOf(paramName) !== -1;
};
/**
* Is deprecated parameter
*
* @param {string} paramName
* @returns {string | undefined}
*/
var isDeprecatedParameter = function isDeprecatedParameter(paramName) {
return deprecatedParams[paramName];
};
/**
* @param {string} param
*/
var checkIfParamIsValid = function checkIfParamIsValid(param) {
if (!isValidParameter(param)) {
warn("Unknown parameter \"".concat(param, "\""));
}
};
/**
* @param {string} param
*/
var checkIfToastParamIsValid = function checkIfToastParamIsValid(param) {
if (toastIncompatibleParams.includes(param)) {
warn("The parameter \"".concat(param, "\" is incompatible with toasts"));
}
};
/**
* @param {string} param
*/
var checkIfParamIsDeprecated = function checkIfParamIsDeprecated(param) {
var isDeprecated = isDeprecatedParameter(param);
if (isDeprecated) {
warnAboutDeprecation(param, isDeprecated);
}
};
/**
* Show relevant warnings for given params
*
* @param {SweetAlertOptions} params
*/
var showWarningsForParams = function showWarningsForParams(params) {
if (params.backdrop === false && params.allowOutsideClick) {
warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');
}
for (var param in params) {
checkIfParamIsValid(param);
if (params.toast) {
checkIfToastParamIsValid(param);
}
checkIfParamIsDeprecated(param);
}
};
/**
* Updates popup parameters.
*
* @param {SweetAlertOptions} params
*/
function update(params) {
var popup = getPopup();
var innerParams = privateProps.innerParams.get(this);
if (!popup || hasClass(popup, innerParams.hideClass.popup)) {
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.");
return;
}
var validUpdatableParams = filterValidParams(params);
var 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
}
});
}
/**
* @param {SweetAlertOptions} params
* @returns {SweetAlertOptions}
*/
var filterValidParams = function filterValidParams(params) {
var validUpdatableParams = {};
Object.keys(params).forEach(function (param) {
if (isUpdatableParameter(param)) {
validUpdatableParams[param] = params[param];
} else {
warn("Invalid parameter to update: ".concat(param));
}
});
return validUpdatableParams;
};
/**
* Dispose the current SweetAlert2 instance
*/
function _destroy() {
var domCache = privateProps.domCache.get(this);
var innerParams = privateProps.innerParams.get(this);
if (!innerParams) {
disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335
return; // This instance has already been destroyed
}
// Check if there is another Swal closing
if (domCache.popup && globalState.swalCloseEventFinishedCallback) {
globalState.swalCloseEventFinishedCallback();
delete globalState.swalCloseEventFinishedCallback;
}
if (typeof innerParams.didDestroy === 'function') {
innerParams.didDestroy();
}
disposeSwal(this);
}
/**
* @param {SweetAlert} instance
*/
var disposeSwal = function disposeSwal(instance) {
disposeWeakMaps(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 currentInstance
delete globalState.currentInstance;
};
/**
* @param {SweetAlert} instance
*/
var disposeWeakMaps = function disposeWeakMaps(instance) {
// If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335
if (instance.isAwaitingPromise) {
unsetWeakMaps(privateProps, instance);
instance.isAwaitingPromise = true;
} else {
unsetWeakMaps(privateMethods, instance);
unsetWeakMaps(privateProps, instance);
delete instance.isAwaitingPromise;
// Unset instance methods
delete instance.disableButtons;
delete instance.enableButtons;
delete instance.getInput;
delete instance.disableInput;
delete instance.enableInput;
delete instance.hideLoading;
delete instance.disableLoading;
delete instance.showValidationMessage;
delete instance.resetValidationMessage;
delete instance.close;
delete instance.closePopup;
delete instance.closeModal;
delete instance.closeToast;
delete instance.rejectPromise;
delete instance.update;
delete instance._destroy;
}
};
/**
* @param {object} obj
* @param {SweetAlert} instance
*/
var unsetWeakMaps = function unsetWeakMaps(obj, instance) {
for (var i in obj) {
obj[i]["delete"](instance);
}
};
var instanceMethods = /*#__PURE__*/Object.freeze({
__proto__: null,
_destroy: _destroy,
close: close,
closeModal: close,
closePopup: close,
closeToast: close,
disableButtons: disableButtons,
disableInput: disableInput,
disableLoading: hideLoading,
enableButtons: enableButtons,
enableInput: enableInput,
getInput: getInput,
handleAwaitingPromise: handleAwaitingPromise,
hideLoading: hideLoading,
rejectPromise: rejectPromise,
resetValidationMessage: resetValidationMessage,
showValidationMessage: showValidationMessage,
update: update
});
/**
* @param {SweetAlertOptions} innerParams
* @param {DomCache} domCache
* @param {Function} dismissWith
*/
var handlePopupClick = function handlePopupClick(innerParams, domCache, dismissWith) {
if (innerParams.toast) {
handleToastClick(innerParams, 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(innerParams, domCache, dismissWith);
}
};
/**
* @param {SweetAlertOptions} innerParams
* @param {DomCache} domCache
* @param {Function} dismissWith
*/
var handleToastClick = function handleToastClick(innerParams, domCache, dismissWith) {
// Closing toast by internal click
domCache.popup.onclick = function () {
if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {
return;
}
dismissWith(DismissReason.close);
};
};
/**
* @param {SweetAlertOptions} innerParams
* @returns {boolean}
*/
var isAnyButtonShown = function isAnyButtonShown(innerParams) {
return !!(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton);
};
var ignoreOutsideClick = false;
/**
* @param {DomCache} domCache
*/
var handleModalMousedown = function handleModalMousedown(domCache) {
domCache.popup.onmousedown = function () {
domCache.container.onmouseup = function (e) {
domCache.container.onmouseup = function () {};
// 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;
}
};
};
};
/**
* @param {DomCache} domCache
*/
var handleContainerMousedown = function handleContainerMousedown(domCache) {
domCache.container.onmousedown = function () {
domCache.popup.onmouseup = function (e) {
domCache.popup.onmouseup = function () {};
// We also need to check if the mouseup target is a child of the popup
if (e.target === domCache.popup || e.target instanceof HTMLElement && domCache.popup.contains(e.target)) {
ignoreOutsideClick = true;
}
};
};
};
/**
* @param {SweetAlertOptions} innerParams
* @param {DomCache} domCache
* @param {Function} dismissWith
*/
var handleModalClick = function handleModalClick(innerParams, domCache, dismissWith) {
domCache.container.onclick = function (e) {
if (ignoreOutsideClick) {
ignoreOutsideClick = false;
return;
}
if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {
dismissWith(DismissReason.backdrop);
}
};
};
var isJqueryElement = function isJqueryElement(elem) {
return _typeof(elem) === 'object' && elem.jquery;
};
var isElement = function isElement(elem) {
return elem instanceof Element || isJqueryElement(elem);
};
var argsToParams = function argsToParams(args) {
var params = {};
if (_typeof(args[0]) === 'object' && !isElement(args[0])) {
Object.assign(params, args[0]);
} else {
['title', 'html', 'icon'].forEach(function (name, index) {
var 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;
};
/**
* Main method to create a new SweetAlert2 popup
*
* @param {...SweetAlertOptions} args
* @returns {Promise<SweetAlertResult>}
*/
function fire() {
var Swal = this; // eslint-disable-line @typescript-eslint/no-this-alias
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _construct(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 {SweetAlertOptions} mixinParams
* @returns {SweetAlert}
*/
function mixin(mixinParams) {
var MixinSwal = /*#__PURE__*/function (_this) {
_inherits(MixinSwal, _this);
function MixinSwal() {
_classCallCheck(this, MixinSwal);
return _callSuper(this, MixinSwal, arguments);
}
_createClass(MixinSwal, [{
key: "_main",
value: function _main(params, priorityMixinParams) {
return _get(_getPrototypeOf(MixinSwal.prototype), "_main", this).call(this, params, Object.assign({}, mixinParams, priorityMixinParams));
}
}]);
return MixinSwal;
}(this); // @ts-ignore
return MixinSwal;
}
/**
* If `timer` parameter is set, returns number of milliseconds of timer remained.
* Otherwise, returns undefined.
*
* @returns {number | undefined}
*/
var getTimerLeft = function getTimerLeft() {
return globalState.timeout && globalState.timeout.getTimerLeft();
};
/**
* Stop timer. Returns number of milliseconds of timer remained.
* If `timer` parameter isn't set, returns undefined.
*
* @returns {number | undefined}
*/
var stopTimer = function 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.
*
* @returns {number | undefined}
*/
var resumeTimer = function resumeTimer() {
if (globalState.timeout) {
var 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.
*
* @returns {number | undefined}
*/
var toggleTimer = function toggleTimer() {
var 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.
*
* @param {number} ms
* @returns {number | undefined}
*/
var increaseTimer = function increaseTimer(ms) {
if (globalState.timeout) {
var remaining = globalState.timeout.increase(ms);
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
*
* @returns {boolean}
*/
var isTimerRunning = function isTimerRunning() {
return !!(globalState.timeout && globalState.timeout.isRunning());
};
var bodyClickListenerAdded = false;
var clickHandlers = {};
/**
* @param {string} attr
*/
function bindClickHandler() {
var attr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'data-swal-template';
clickHandlers[attr] = this;
if (!bodyClickListenerAdded) {
document.body.addEventListener('click', bodyClickListener);
bodyClickListenerAdded = true;
}
}
var bodyClickListener = function bodyClickListener(event) {
for (var el = event.target; el && el !== document; el = el.parentNode) {
for (var attr in clickHandlers) {
var template = el.getAttribute(attr);
if (template) {
clickHandlers[attr].fire({
template: template
});
return;
}
}
}
};
var staticMethods = /*#__PURE__*/Object.freeze({
__proto__: null,
argsToParams: argsToParams,
bindClickHandler: bindClickHandler,
clickCancel: clickCancel,
clickConfirm: clickConfirm,
clickDeny: clickDeny,
enableLoading: showLoading,
fire: fire,
getActions: getActions,
getCancelButton: getCancelButton,
getCloseButton: getCloseButton,
getConfirmButton: getConfirmButton,
getContainer: getContainer,
getDenyButton: getDenyButton,
getFocusableElements: getFocusableElements,
getFooter: getFooter,
getHtmlContainer: getHtmlContainer,
getIcon: getIcon,
getIconContent: getIconContent,
getImage: getImage,
getInputLabel: getInputLabel,
getLoader: getLoader,
getPopup: getPopup,
getProgressSteps: getProgressSteps,
getTimerLeft: getTimerLeft,
getTimerProgressBar: getTimerProgressBar,
getTitle: getTitle,
getValidationMessage: getValidationMessage,
increaseTimer: increaseTimer,
isDeprecatedParameter: isDeprecatedParameter,
isLoading: isLoading,
isTimerRunning: isTimerRunning,
isUpdatableParameter: isUpdatableParameter,
isValidParameter: isValidParameter,
isVisible: isVisible,
mixin: mixin,
resumeTimer: resumeTimer,
showLoading: showLoading,
stopTimer: stopTimer,
toggleTimer: toggleTimer
});
var Timer = /*#__PURE__*/function () {
/**
* @param {Function} callback
* @param {number} delay
*/
function Timer(callback, delay) {
_classCallCheck(this, Timer);
this.callback = callback;
this.remaining = delay;
this.running = false;
this.start();
}
/**
* @returns {number}
*/
_createClass(Timer, [{
key: "start",
value: function start() {
if (!this.running) {
this.running = true;
this.started = new Date();
this.id = setTimeout(this.callback, this.remaining);
}
return this.remaining;
}
/**
* @returns {number}
*/
}, {
key: "stop",
value: function stop() {
if (this.started && this.running) {
this.running = false;
clearTimeout(this.id);
this.remaining -= new Date().getTime() - this.started.getTime();
}
return this.remaining;
}
/**
* @param {number} n
* @returns {number}
*/
}, {
key: "increase",
value: function increase(n) {
var running = this.running;
if (running) {
this.stop();
}
this.remaining += n;
if (running) {
this.start();
}
return this.remaining;
}
/**
* @returns {number}
*/
}, {
key: "getTimerLeft",
value: function getTimerLeft() {
if (this.running) {
this.stop();
this.start();
}
return this.remaining;
}
/**
* @returns {boolean}
*/
}, {
key: "isRunning",
value: function isRunning() {
return this.running;
}
}]);
return Timer;
}();
var swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];
/**
* @param {SweetAlertOptions} params
* @returns {SweetAlertOptions}
*/
var getTemplateParams = function getTemplateParams(params) {
/** @type {HTMLTemplateElement} */
var template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template;
if (!template) {
return {};
}
/** @type {DocumentFragment} */
var templateContent = template.content;
showWarningsForElements(templateContent);
var result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));
return result;
};
/**
* @param {DocumentFragment} templateContent
* @returns {SweetAlertOptions}
*/
var getSwalParams = function getSwalParams(templateContent) {
var result = {};
/** @type {HTMLElement[]} */
var swalParams = Array.from(templateContent.querySelectorAll('swal-param'));
swalParams.forEach(function (param) {
showWarningsForAttributes(param, ['name', 'value']);
var paramName = param.getAttribute('name');
var value = param.getAttribute('value');
if (typeof defaultParams[paramName] === 'boolean') {
result[paramName] = value !== 'false';
} else if (_typeof(defaultParams[paramName]) === 'object') {
result[paramName] = JSON.parse(value);
} else {
result[paramName] = value;
}
});
return result;
};
/**
* @param {DocumentFragment} templateContent
* @returns {SweetAlertOptions}
*/
var getSwalFunctionParams = function getSwalFunctionParams(templateContent) {
var result = {};
/** @type {HTMLElement[]} */
var swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));
swalFunctions.forEach(function (param) {
var paramName = param.getAttribute('name');
var value = param.getAttribute('value');
result[paramName] = new Function("return ".concat(value))();
});
return result;
};
/**
* @param {DocumentFragment} templateContent
* @returns {SweetAlertOptions}
*/
var getSwalButtons = function getSwalButtons(templateContent) {
var result = {};
/** @type {HTMLElement[]} */
var swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));
swalButtons.forEach(function (button) {
showWarningsForAttributes(button, ['type', 'color', 'aria-label']);
var 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;
};
/**
* @param {DocumentFragment} templateContent
* @returns {SweetAlertOptions}
*/
var getSwalImage = function getSwalImage(templateContent) {
var result = {};
/** @type {HTMLElement} */
var 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;
};
/**
* @param {DocumentFragment} templateContent
* @returns {SweetAlertOptions}
*/
var getSwalIcon = function getSwalIcon(templateContent) {
var result = {};
/** @type {HTMLElement} */
var icon = templateContent.querySelector('swal-icon');
if (icon) {
showWarningsForAttributes(icon, ['type', 'color']);
if (icon.hasAttribute('type')) {
/** @type {SweetAlertIcon} */
// @ts-ignore
result.icon = icon.getAttribute('type');
}
if (icon.hasAttribute('color')) {
result.iconColor = icon.getAttribute('color');
}
result.iconHtml = icon.innerHTML;
}
return result;
};
/**
* @param {DocumentFragment} templateContent
* @returns {SweetAlertOptions}
*/
var getSwalInput = function getSwalInput(templateContent) {
var result = {};
/** @type {HTMLElement} */
var input = templateContent.querySelector('swal-input');
if (input) {
showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);
/** @type {SweetAlertInput} */
// @ts-ignore
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');
}
}
/** @type {HTMLElement[]} */
var inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));
if (inputOptions.length) {
result.inputOptions = {};
inputOptions.forEach(function (option) {
showWarningsForAttributes(option, ['value']);
var optionValue = option.getAttribute('value');
var optionName = option.innerHTML;
result.inputOptions[optionValue] = optionName;
});
}
return result;
};
/**
* @param {DocumentFragment} templateContent
* @param {string[]} paramNames
* @returns {SweetAlertOptions}
*/
var getSwalStringParams = function getSwalStringParams(templateContent, paramNames) {
var result = {};
for (var i in paramNames) {
var paramName = paramNames[i];
/** @type {HTMLElement} */
var tag = templateContent.querySelector(paramName);
if (tag) {
showWarningsForAttributes(tag, []);
result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();
}
}
return result;
};
/**
* @param {DocumentFragment} templateContent
*/
var showWarningsForElements = function showWarningsForElements(templateContent) {
var allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);
Array.from(templateContent.children).forEach(function (el) {
var tagName = el.tagName.toLowerCase();
if (!allowedElements.includes(tagName)) {
warn("Unrecognized element <".concat(tagName, ">"));
}
});
};
/**
* @param {HTMLElement} el
* @param {string[]} allowedAttributes
*/
var showWarningsForAttributes = function showWarningsForAttributes(el, allowedAttributes) {
Array.from(el.attributes).forEach(function (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.')]);
}
});
};
var SHOW_CLASS_TIMEOUT = 10;
/**
* Open popup, add necessary classes and styles, fix scrollbar
*
* @param {SweetAlertOptions} params
*/
var openPopup = function openPopup(params) {
var container = getContainer();
var popup = getPopup();
if (typeof params.willOpen === 'function') {
params.willOpen(popup);
}
var bodyStyles = window.getComputedStyle(document.body);
var initialBodyOverflow = bodyStyles.overflowY;
addClasses(container, popup, params);
// scrolling is 'hidden' until animation is done, after that 'auto'
setTimeout(function () {
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(function () {
return params.didOpen(popup);
});
}
removeClass(container, swalClasses['no-transition']);
};
/**
* @param {AnimationEvent} event
*/
var swalOpenAnimationFinished = function swalOpenAnimationFinished(event) {
var popup = getPopup();
if (event.target !== popup || !animationEndEvent) {
return;
}
var container = getContainer();
popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);
container.style.overflowY = 'auto';
};
/**
* @param {HTMLElement} container
* @param {HTMLElement} popup
*/
var setScrollingVisibility = function setScrollingVisibility(container, popup) {
if (animationEndEvent && hasCssAnimation(popup)) {
container.style.overflowY = 'hidden';
popup.addEventListener(animationEndEvent, swalOpenAnimationFinished);
} else {
container.style.overflowY = 'auto';
}
};
/**
* @param {HTMLElement} container
* @param {boolean} scrollbarPadding
* @param {string} initialBodyOverflow
*/
var fixScrollContainer = function fixScrollContainer(container, scrollbarPadding, initialBodyOverflow) {
iOSfix();
if (scrollbarPadding && initialBodyOverflow !== 'hidden') {
replaceScrollbarWithPadding(initialBodyOverflow);
}
// sweetalert2/issues/1247
setTimeout(function () {
container.scrollTop = 0;
});
};
/**
* @param {HTMLElement} container
* @param {HTMLElement} popup
* @param {SweetAlertOptions} params
*/
var addClasses = function addClasses(container, popup, params) {
addClass(container, params.showClass.backdrop);
if (params.animation) {
// this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059
popup.style.setProperty('opacity', '0', 'important');
show(popup, 'grid');
setTimeout(function () {
// 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
} else {
show(popup, 'grid');
}
addClass([document.documentElement, document.body], swalClasses.shown);
if (params.heightAuto && params.backdrop && !params.toast) {
addClass([document.documentElement, document.body], swalClasses['height-auto']);
}
};
var defaultInputValidators = {
/**
* @param {string} string
* @param {string} [validationMessage]
* @returns {Promise<string | void>}
*/
email: function email(string, validationMessage) {
return /^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]+$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');
},
/**
* @param {string} string
* @param {string} [validationMessage]
* @returns {Promise<string | void>}
*/
url: function 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');
}
};
/**
* @param {SweetAlertOptions} params
*/
function setDefaultInputValidators(params) {
// Use default `inputValidator` for supported input types if not provided
if (params.inputValidator) {
return;
}
if (params.input === 'email') {
params.inputValidator = defaultInputValidators['email'];
}
if (params.input === 'url') {
params.inputValidator = defaultInputValidators['url'];
}
}
/**
* @param {SweetAlertOptions} params
*/
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 {SweetAlertOptions} params
*/
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 <br> in title
if (typeof params.title === 'string') {
params.title = params.title.split('\n').join('<br />');
}
init(params);
}
/** @type {SweetAlert} */
var currentInstance;
var _promise = /*#__PURE__*/new WeakMap();
var SweetAlert = /*#__PURE__*/function () {
/**
* @param {...any} args
* @this {SweetAlert}
*/
function SweetAlert() {
_classCallCheck(this, SweetAlert);
/**
* @type {Promise<SweetAlertResult>}
*/
_classPrivateFieldInitSpec(this, _promise, void 0);
// Prevent run in Node env
if (typeof window === 'undefined') {
return;
}
currentInstance = this;
// @ts-ignore
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var outerParams = Object.freeze(this.constructor.argsToParams(args));
/** @type {Readonly<SweetAlertOptions>} */
this.params = outerParams;
/** @type {boolean} */
this.isAwaitingPromise = false;
_classPrivateFieldSet2(_promise, this, this._main(currentInstance.params));
}
_createClass(SweetAlert, [{
key: "_main",
value: function _main(userParams) {
var mixinParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
showWarningsForParams(Object.assign({}, mixinParams, userParams));
if (globalState.currentInstance) {
var swalPromiseResolve = privateMethods.swalPromiseResolve.get(globalState.currentInstance);
var isAwaitingPromise = globalState.currentInstance.isAwaitingPromise;
globalState.currentInstance._destroy();
if (!isAwaitingPromise) {
swalPromiseResolve({
isDismissed: true
});
}
if (isModal()) {
unsetAriaHidden();
}
}
globalState.currentInstance = currentInstance;
var 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);
var domCache = populateDomCache(currentInstance);
render(currentInstance, innerParams);
privateProps.innerParams.set(currentInstance, innerParams);
return swalPromise(currentInstance, domCache, innerParams);
}
// `catch` cannot be the name of a module export, so we define our thenable methods here instead
}, {
key: "then",
value: function then(onFulfilled) {
return _classPrivateFieldGet2(_promise, this).then(onFulfilled);
}
}, {
key: "finally",
value: function _finally(onFinally) {
return _classPrivateFieldGet2(_promise, this)["finally"](onFinally);
}
}]);
return SweetAlert;
}();
/**
* @param {SweetAlert} instance
* @param {DomCache} domCache
* @param {SweetAlertOptions} innerParams
* @returns {Promise}
*/
var swalPromise = function swalPromise(instance, domCache, innerParams) {
return new Promise(function (resolve, reject) {
// functions to handle all closings/dismissals
/**
* @param {DismissReason} dismiss
*/
var dismissWith = function dismissWith(dismiss) {
instance.close({
isDismissed: true,
dismiss: dismiss
});
};
privateMethods.swalPromiseResolve.set(instance, resolve);
privateMethods.swalPromiseReject.set(instance, reject);
domCache.confirmButton.onclick = function () {
handleConfirmButtonClick(instance);
};
domCache.denyButton.onclick = function () {
handleDenyButtonClick(instance);
};
domCache.cancelButton.onclick = function () {
handleCancelButtonClick(instance, dismissWith);
};
domCache.closeButton.onclick = function () {
dismissWith(DismissReason.close);
};
handlePopupClick(innerParams, domCache, dismissWith);
addKeydownHandler(globalState, innerParams, dismissWith);
handleInputOptionsAndValue(instance, innerParams);
openPopup(innerParams);
setupTimer(globalState, innerParams, dismissWith);
initFocus(domCache, innerParams);
// Scroll container to top on open (#1247, #1946)
setTimeout(function () {
domCache.container.scrollTop = 0;
});
});
};
/**
* @param {SweetAlertOptions} userParams
* @param {SweetAlertOptions} mixinParams
* @returns {SweetAlertOptions}
*/
var prepareParams = function prepareParams(userParams, mixinParams) {
var templateParams = getTemplateParams(userParams);
var 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);
if (params.animation === false) {
params.showClass = {
backdrop: 'swal2-noanimation'
};
params.hideClass = {};
}
return params;
};
/**
* @param {SweetAlert} instance
* @returns {DomCache}
*/
var populateDomCache = function populateDomCache(instance) {
var 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;
};
/**
* @param {GlobalState} globalState
* @param {SweetAlertOptions} innerParams
* @param {Function} dismissWith
*/
var setupTimer = function setupTimer(globalState, innerParams, dismissWith) {
var timerProgressBar = getTimerProgressBar();
hide(timerProgressBar);
if (innerParams.timer) {
globalState.timeout = new Timer(function () {
dismissWith('timer');
delete globalState.timeout;
}, innerParams.timer);
if (innerParams.timerProgressBar) {
show(timerProgressBar);
applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');
setTimeout(function () {
if (globalState.timeout && globalState.timeout.running) {
// timer can be already stopped or unset at this point
animateTimerProgressBar(innerParams.timer);
}
});
}
}
};
/**
* @param {DomCache} domCache
* @param {SweetAlertOptions} innerParams
*/
var initFocus = function initFocus(domCache, innerParams) {
if (innerParams.toast) {
return;
}
if (!callIfFunction(innerParams.allowEnterKey)) {
blurActiveElement();
return;
}
if (!focusButton(domCache, innerParams)) {
setFocus(-1, 1);
}
};
/**
* @param {DomCache} domCache
* @param {SweetAlertOptions} innerParams
* @returns {boolean}
*/
var focusButton = function focusButton(domCache, innerParams) {
if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) {
domCache.denyButton.focus();
return true;
}
if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) {
domCache.cancelButton.focus();
return true;
}
if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) {
domCache.confirmButton.focus();
return true;
}
return false;
};
var blurActiveElement = function blurActiveElement() {
if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {
document.activeElement.blur();
}
};
// Dear russian users visiting russian sites. Let's have fun.
if (typeof window !== 'undefined' && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|by|xn--p1ai)$/)) {
var now = new Date();
var initiationDate = localStorage.getItem('swal-initiation');
if (!initiationDate) {
localStorage.setItem('swal-initiation', "".concat(now));
} else if ((now.getTime() - Date.parse(initiationDate)) / (1000 * 60 * 60 * 24) > 3) {
setTimeout(function () {
document.body.style.pointerEvents = 'none';
var ukrainianAnthem = document.createElement('audio');
ukrainianAnthem.src = 'https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3';
ukrainianAnthem.loop = true;
document.body.appendChild(ukrainianAnthem);
setTimeout(function () {
ukrainianAnthem.play()["catch"](function () {
// ignore
});
}, 2500);
}, 500);
}
}
// Assign instance methods from src/instanceMethods/*.js to prototype
SweetAlert.prototype.disableButtons = disableButtons;
SweetAlert.prototype.enableButtons = enableButtons;
SweetAlert.prototype.getInput = getInput;
SweetAlert.prototype.disableInput = disableInput;
SweetAlert.prototype.enableInput = enableInput;
SweetAlert.prototype.hideLoading = hideLoading;
SweetAlert.prototype.disableLoading = hideLoading;
SweetAlert.prototype.showValidationMessage = showValidationMessage;
SweetAlert.prototype.resetValidationMessage = resetValidationMessage;
SweetAlert.prototype.close = close;
SweetAlert.prototype.closePopup = close;
SweetAlert.prototype.closeModal = close;
SweetAlert.prototype.closeToast = close;
SweetAlert.prototype.rejectPromise = rejectPromise;
SweetAlert.prototype.update = update;
SweetAlert.prototype._destroy = _destroy;
// 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(function (key) {
/**
* @param {...any} args
* @returns {any | undefined}
*/
SweetAlert[key] = function () {
if (currentInstance && currentInstance[key]) {
var _currentInstance;
return (_currentInstance = currentInstance)[key].apply(_currentInstance, arguments);
}
return null;
};
});
SweetAlert.DismissReason = DismissReason;
SweetAlert.version = '11.10.7';
var Swal = SweetAlert;
// @ts-ignore
Swal["default"] = Swal;
return Swal;
}));
if (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}