PageSourceSearch

https://customer.vitelglobal.com/assets/js/sweetalert2.js

js vitelglobal.com collected 2026-09-24 10:20:01 UTC 58,639 bytes, 1,871 lines download raw bytes

1/*!
2 * sweetalert2 v7.2.0
3 * Released under the MIT License.
4 */
5(function (global, factory) {
6	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
7	typeof define === 'function' && define.amd ? define(factory) :
8	(global.Sweetalert2 = factory());
9}(this, (function () { 'use strict';
10
11var defaultParams = {
12  title: '',
13  titleText: '',
14  text: '',
15  html: '',
16  type: null,
17  toast: false,
18  customClass: '',
19  target: 'body',
20  backdrop: true,
21  animation: true,
22  allowOutsideClick: true,
23  allowEscapeKey: true,
24  allowEnterKey: true,
25  showConfirmButton: true,
26  showCancelButton: false,
27  preConfirm: null,
28  confirmButtonText: 'OK',
29  confirmButtonAriaLabel: '',
30  confirmButtonColor: '#3085d6',
31  confirmButtonClass: null,
32  cancelButtonText: 'Cancel',
33  cancelButtonAriaLabel: '',
34  cancelButtonColor: '#aaa',
35  cancelButtonClass: null,
36  buttonsStyling: true,
37  reverseButtons: false,
38  focusConfirm: true,
39  focusCancel: false,
40  showCloseButton: false,
41  closeButtonAriaLabel: 'Close this dialog',
42  showLoaderOnConfirm: false,
43  imageUrl: null,
44  imageWidth: null,
45  imageHeight: null,
46  imageAlt: '',
47  imageClass: null,
48  timer: null,
49  width: 500,
50  padding: 20,
51  background: '#fff',
52  input: null,
53  inputPlaceholder: '',
54  inputValue: '',
55  inputOptions: {},
56  inputAutoTrim: true,
57  inputClass: null,
58  inputAttributes: {},
59  inputValidator: null,
60  grow: false,
61  position: 'center',
62  progressSteps: [],
63  currentProgressStep: null,
64  progressStepsDistance: '40px',
65  onBeforeOpen: null,
66  onOpen: null,
67  onClose: null,
68  useRejections: false,
69  expectRejections: false
70};
71
72var deprecatedParams = ['useRejections', 'expectRejections'];
73
74var swalPrefix = 'swal2-';
75
76var prefix = function prefix(items) {
77  var result = {};
78  for (var i in items) {
79    result[items[i]] = swalPrefix + items[i];
80  }
81  return result;
82};
83
84var swalClasses = prefix(['container', 'shown', 'iosfix', 'popup', 'modal', 'no-backdrop', 'toast', 'toast-shown', 'overlay', 'fade', 'show', 'hide', 'noanimation', 'close', 'title', 'content', 'contentwrapper', 'buttonswrapper', 'confirm', 'cancel', 'icon', 'image', 'input', 'has-input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea', 'inputerror', 'validationerror', 'progresssteps', 'activeprogressstep', 'progresscircle', 'progressline', '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']);
85
86var iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);
87
88var consolePrefix = 'SweetAlert2:';
89
90/*
91 * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)
92 */
93var colorLuminance = function colorLuminance(hex, lum) {
94  // Validate hex string
95  hex = String(hex).replace(/[^0-9a-f]/gi, '');
96  if (hex.length < 6) {
97    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
98  }
99  lum = lum || 0;
100
101  // Convert to decimal and change luminosity
102  var rgb = '#';
103  for (var i = 0; i < 3; i++) {
104    var c = parseInt(hex.substr(i * 2, 2), 16);
105    c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
106    rgb += ('00' + c).substr(c.length);
107  }
108
109  return rgb;
110};
111
112/**
113 * Filter the unique values into a new array
114 * @param arr
115 */
116var uniqueArray = function uniqueArray(arr) {
117  var result = [];
118  for (var i in arr) {
119    if (result.indexOf(arr[i]) === -1) {
120      result.push(arr[i]);
121    }
122  }
123  return result;
124};
125
126/**
127 * Standardise console warnings
128 * @param message
129 */
130var warn = function warn(message) {
131  console.warn(consolePrefix + ' ' + message);
132};
133
134/**
135 * Standardise console errors
136 * @param message
137 */
138var error = function error(message) {
139  console.error(consolePrefix + ' ' + message);
140};
141
142/**
143 * Private global state for `warnOnce`
144 * @type {Array}
145 * @private
146 */
147var previousWarnOnceMessages = [];
148
149/**
150 * Show a console warning, but only if it hasn't already been shown
151 * @param message
152 */
153var warnOnce = function warnOnce(message) {
154  if (!(previousWarnOnceMessages.indexOf(message) !== -1)) {
155    previousWarnOnceMessages.push(message);
156    warn(message);
157  }
158};
159
160// Remember state in cases where opening and handling a modal will fiddle with it.
161var states = {
162  previousActiveElement: null,
163  previousBodyPadding: null
164
165  // Detect Node env
166};var isNodeEnv = function isNodeEnv() {
167  return typeof window === 'undefined' || typeof document === 'undefined';
168};
169
170/*
171 * Add modal + overlay to DOM
172 */
173var init = function init(params) {
174  // Clean up the old popup if it exists
175  var c = getContainer();
176  if (c) {
177    c.parentNode.removeChild(c);
178    removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['has-input'], swalClasses['toast-shown']]);
179  }
180
181  if (isNodeEnv()) {
182    error('SweetAlert2 requires document to initialize');
183    return;
184  }
185
186  var container = document.createElement('div');
187  container.className = swalClasses.container;
188  container.innerHTML = sweetHTML;
189
190  var targetElement = typeof params.target === 'string' ? document.querySelector(params.target) : params.target;
191  targetElement.appendChild(container);
192
193  var popup = getPopup();
194  var input = getChildByClass(popup, swalClasses.input);
195  var file = getChildByClass(popup, swalClasses.file);
196  var range = popup.querySelector('.' + swalClasses.range + ' input');
197  var rangeOutput = popup.querySelector('.' + swalClasses.range + ' output');
198  var select = getChildByClass(popup, swalClasses.select);
199  var checkbox = popup.querySelector('.' + swalClasses.checkbox + ' input');
200  var textarea = getChildByClass(popup, swalClasses.textarea);
201
202  // a11y
203  popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');
204
205  var resetValidationError = function resetValidationError() {
206    sweetAlert.isVisible() && sweetAlert.resetValidationError();
207  };
208
209  input.oninput = resetValidationError;
210  file.onchange = resetValidationError;
211  select.onchange = resetValidationError;
212  checkbox.onchange = resetValidationError;
213  textarea.oninput = resetValidationError;
214
215  range.oninput = function () {
216    resetValidationError();
217    rangeOutput.value = range.value;
218  };
219
220  range.onchange = function () {
221    resetValidationError();
222    range.previousSibling.value = range.value;
223  };
224
225  return popup;
226};
227
228/*
229 * Manipulate DOM
230 */
231
232var sweetHTML = ('\n <div role="dialog" aria-modal="true" aria-labelledby="' + swalClasses.title + '" aria-describedby="' + swalClasses.content + '" class="' + swalClasses.popup + '" tabindex="-1">\n   <ul class="' + swalClasses.progresssteps + '"></ul>\n   <div class="' + swalClasses.icon + ' ' + iconTypes.error + '">\n     <span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span>\n   </div>\n   <div class="' + swalClasses.icon + ' ' + iconTypes.question + '">?</div>\n   <div class="' + swalClasses.icon + ' ' + iconTypes.warning + '">!</div>\n   <div class="' + swalClasses.icon + ' ' + iconTypes.info + '">i</div>\n   <div class="' + swalClasses.icon + ' ' + iconTypes.success + '">\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   </div>\n   <img class="' + swalClasses.image + '" />\n   <div class="' + swalClasses.contentwrapper + '">\n   <h2 class="' + swalClasses.title + '" id="' + swalClasses.title + '"></h2>\n   <div id="' + swalClasses.content + '" class="' + swalClasses.content + '"></div>\n   </div>\n   <input class="' + swalClasses.input + '" />\n   <input type="file" class="' + swalClasses.file + '" />\n   <div class="' + swalClasses.range + '">\n     <output></output>\n     <input type="range" />\n   </div>\n   <select class="' + swalClasses.select + '"></select>\n   <div class="' + swalClasses.radio + '"></div>\n   <label for="' + swalClasses.checkbox + '" class="' + swalClasses.checkbox + '">\n     <input type="checkbox" />\n   </label>\n   <textarea class="' + swalClasses.textarea + '"></textarea>\n   <div class="' + swalClasses.validationerror + '" id="' + swalClasses.validationerror + '"></div>\n   <div class="' + swalClasses.buttonswrapper + '">\n     <button type="button" class="' + swalClasses.confirm + '">OK</button>\n     <button type="button" class="' + swalClasses.cancel + '">Cancel</button>\n   </div>\n   <button type="button" class="' + swalClasses.close + '">\xD7</button>\n </div>\n').replace(/(^|\n)\s*/g, '');
233
234var getContainer = function getContainer() {
235  return document.body.querySelector('.' + swalClasses.container);
236};
237
238var getPopup = function getPopup() {
239  return getContainer() ? getContainer().querySelector('.' + swalClasses.popup) : null;
240};
241
242var getIcons = function getIcons() {
243  var popup = getPopup();
244  return popup.querySelectorAll('.' + swalClasses.icon);
245};
246
247var elementByClass = function elementByClass(className) {
248  return getContainer() ? getContainer().querySelector('.' + className) : null;
249};
250
251var getTitle = function getTitle() {
252  return elementByClass(swalClasses.title);
253};
254
255var getContent = function getContent() {
256  return elementByClass(swalClasses.content);
257};
258
259var getImage = function getImage() {
260  return elementByClass(swalClasses.image);
261};
262
263var getProgressSteps = function getProgressSteps() {
264  return elementByClass(swalClasses.progresssteps);
265};
266
267var getValidationError = function getValidationError() {
268  return elementByClass(swalClasses.validationerror);
269};
270
271var getConfirmButton = function getConfirmButton() {
272  return elementByClass(swalClasses.confirm);
273};
274
275var getCancelButton = function getCancelButton() {
276  return elementByClass(swalClasses.cancel);
277};
278
279var getButtonsWrapper = function getButtonsWrapper() {
280  return elementByClass(swalClasses.buttonswrapper);
281};
282
283var getCloseButton = function getCloseButton() {
284  return elementByClass(swalClasses.close);
285};
286
287var getFocusableElements = function getFocusableElements() {
288  var focusableElementsWithTabindex = Array.from(getPopup().querySelectorAll('[tabindex]:not
288([tabindex="-1"]):not([tabindex="0"])'))
289  // sort according to tabindex
290  .sort(function (a, b) {
291    a = parseInt(a.getAttribute('tabindex'));
292    b = parseInt(b.getAttribute('tabindex'));
293    if (a > b) {
294      return 1;
295    } else if (a < b) {
296      return -1;
297    }
298    return 0;
299  });
300
301  var otherFocusableElements = Array.prototype.slice.call(getPopup().querySelectorAll('button, input:not([type=hidden]), textarea, select, a, [tabindex="0"]'));
302
303  return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements));
304};
305
306var isModal = function isModal() {
307  return !document.body.classList.contains(swalClasses['toast-shown']);
308};
309
310var isToast = function isToast() {
311  return document.body.classList.contains(swalClasses['toast-shown']);
312};
313
314var hasClass = function hasClass(elem, className) {
315  if (elem.classList) {
316    return elem.classList.contains(className);
317  }
318  return false;
319};
320
321var focusInput = function focusInput(input) {
322  input.focus();
323
324  // place cursor at end of text in text input
325  if (input.type !== 'file') {
326    // http://stackoverflow.com/a/2345915/1331425
327    var val = input.value;
328    input.value = '';
329    input.value = val;
330  }
331};
332
333var addOrRemoveClass = function addOrRemoveClass(target, classList, add) {
334  if (!target || !classList) {
335    return;
336  }
337  if (typeof classList === 'string') {
338    classList = classList.split(/\s+/).filter(Boolean);
339  }
340  classList.forEach(function (className) {
341    if (target.forEach) {
342      target.forEach(function (elem) {
343        add ? elem.classList.add(className) : elem.classList.remove(className);
344      });
345    } else {
346      add ? target.classList.add(className) : target.classList.remove(className);
347    }
348  });
349};
350
351var addClass = function addClass(target, classList) {
352  addOrRemoveClass(target, classList, true);
353};
354
355var removeClass = function removeClass(target, classList) {
356  addOrRemoveClass(target, classList, false);
357};
358
359var getChildByClass = function getChildByClass(elem, className) {
360  for (var i = 0; i < elem.childNodes.length; i++) {
361    if (hasClass(elem.childNodes[i], className)) {
362      return elem.childNodes[i];
363    }
364  }
365};
366
367var show = function show(elem, display) {
368  if (!display) {
369    display = elem === getPopup() || elem === getButtonsWrapper() ? 'flex' : 'block';
370  }
371  elem.style.opacity = '';
372  elem.style.display = display;
373};
374
375var hide = function hide(elem) {
376  elem.style.opacity = '';
377  elem.style.display = 'none';
378};
379
380var empty = function empty(elem) {
381  while (elem.firstChild) {
382    elem.removeChild(elem.firstChild);
383  }
384};
385
386// borrowed from jquery $(elem).is(':visible') implementation
387var isVisible = function isVisible(elem) {
388  return elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length;
389};
390
391var removeStyleProperty = function removeStyleProperty(elem, property) {
392  if (elem.style.removeProperty) {
393    elem.style.removeProperty(property);
394  } else {
395    elem.style.removeAttribute(property);
396  }
397};
398
399var animationEndEvent = function () {
400  // Prevent run in Node env
401  if (isNodeEnv()) {
402    return false;
403  }
404
405  var testEl = document.createElement('div');
406  var transEndEventNames = {
407    'WebkitAnimation': 'webkitAnimationEnd',
408    'OAnimation': 'oAnimationEnd oanimationend',
409    'animation': 'animationend'
410  };
411  for (var i in transEndEventNames) {
412    if (transEndEventNames.hasOwnProperty(i) && typeof testEl.style[i] !== 'undefined') {
413      return transEndEventNames[i];
414    }
415  }
416
417  return false;
418}();
419
420// Reset previous window keydown handler and focued element
421var resetPrevState = function resetPrevState() {
422  if (states.previousActiveElement && states.previousActiveElement.focus) {
423    var x = window.scrollX;
424    var y = window.scrollY;
425    states.previousActiveElement.focus();
426    if (typeof x !== 'undefined' && typeof y !== 'undefined') {
427      // IE doesn't have scrollX/scrollY support
428      window.scrollTo(x, y);
429    }
430  }
431};
432
433// Measure width of scrollbar
434// https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286
435var measureScrollbar = function measureScrollbar() {
436  var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;
437  if (supportsTouch) {
438    return 0;
439  }
440  var scrollDiv = document.createElement('div');
441  scrollDiv.style.width = '50px';
442  scrollDiv.style.height = '50px';
443  scrollDiv.style.overflow = 'scroll';
444  document.body.appendChild(scrollDiv);
445  var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
446  document.body.removeChild(scrollDiv);
447  return scrollbarWidth;
448};
449
450/**
451 * Inject a string of CSS into the page header
452 *
453 * @param {String} css
454 */
455
456var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
457  return typeof obj;
458} : function (obj) {
459  return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
460};
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482var _extends = Object.assign || function (target) {
483  for (var i = 1; i < arguments.length; i++) {
484    var source = arguments[i];
485
486    for (var key in source) {
487      if (Object.prototype.hasOwnProperty.call(source, key)) {
488        target[key] = source[key];
489      }
490    }
491  }
492
493  return target;
494};
495
496var popupParams = _extends({}, defaultParams);
497var queue = [];
498
499var previousWindowKeyDown = void 0;
500var windowOnkeydownOverridden = void 0;
501
502/*
503 * Check for the existence of Promise
504 * Hopefully to avoid many github issues
505 */
506if (typeof Promise === 'undefined') {
507  error('This package requires a Promise library, please include a shim to enable it in this browser (See: https://github.com/limonte/sweetalert2/wiki/Migration-from-SweetAlert-to-SweetAlert2#1-ie-support)');
508}
509
510/**
511 * Show relevant warnings for given params
512 *
513 * @param params
514 */
515var showWarningsForParams = function showWarningsForParams(params) {
516  for (var param in params) {
517    if (!sweetAlert.isValidParameter(param)) {
518      warn('Unknown parameter "' + param + '"');
519    }
520    if (sweetAlert.isDeprecatedParameter(param)) {
521      warnOnce('The parameter "' + param + '" is deprecated and will be removed in the next major release.');
522    }
523  }
524};
525
526/**
527 * Set type, text and actions on popup
528 *
529 * @param params
530 * @returns {boolean}
531 */
532var setParameters = function setParameters(params) {
533  // If a custom element is set, determine if it is valid
534  if (typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {
535    warn('Target parameter is not valid, defaulting to "body"');
536    params.target = 'body';
537  }
538
539  var popup = void 0;
540  var oldPopup = getPopup();
541  var targetElement = typeof params.target === 'string' ? document.querySelector(params.target) : params.target;
542  // If the model target has changed, refresh the popup
543  if (oldPopup && targetElement && oldPopup.parentNode !== targetElement.parentNode) {
544    popup = init(params);
545  } else {
546    popup = oldPopup || init(params);
547  }
548
549  // Set popup width
550  var popupWidth = params.width === defaultParams.width && params.toast ? 'auto' : params.width;
551  popup.style.width = typeof popupWidth === 'number' ? popupWidth + 'px' : popupWidth;
552
553  var popupPadding = params.padding === defaultParams.padding && params.toast ? 'inherit' : params.padding;
554  popup.style.padding = typeof popupPadding === 'number' ? popupPadding + 'px' : popupPadding;
555  popup.style.background = params.background;
556  var successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');
557  for (var i = 0; i < successIconParts.length; i++) {
558    successIconParts[i].style.background = params.background;
559  }
560
561  var container = getContainer();
562  var title = getTitle();
563  var content = getContent();
564  var buttonsWrapper = getButtonsWrapper();
565  var confirmButton = getConfirmButton();
566  var cancelButton = getCancelButton();
567  var closeButton = getCloseButton();
568
569  // Title
570  if (params.titleText) {
571    title.innerText = params.titleText;
572  } else {
573    title.innerHTML = params.title.split('\n').join('<br />');
574  }
575
576  if (!params.backdrop) {
577    addClass([document.documentElement, document.body], swalClasses['no-backdrop']);
578  }
579
580  // Content
581  if (params.text || params.html) {
582    if (_typeof(params.html) === 'object') {
583      content.innerHTML = '';
584      if (0 in params.html) {
585        for (var _i = 0; _i in params.html; _i++) {
586          content.appendChild(params.html[_i].cloneNode(true));
587        }
588      } else {
589        content.appendChild(params.html.cloneNode(true));
590      }
591    } else if (params.html) {
592      content.innerHTML = params.html;
593    } else if (params.text) {
594      content.textContent = params.text;
595    }
596    show(content);
597  } else {
598    hide(content);
599  }
600
601  // Position
602  if (params.position in swalClasses) {
603    addClass(container, swalClasses[params.position]);
604  }
605
606  // Grow
607  if (params.grow && typeof params.grow === 'string') {
608    var growClass = 'grow-' + params.grow;
609    if (growClass in swalClasses) {
610      addClass(container, swalClasses[growClass]);
611    }
612  }
613
614  // Close button
615  if (params.showCloseButton) {
616    closeButton.setAttribute('aria-label', params.closeButtonAriaLabel);
617    show(closeButton);
618  } else {
619    hide(closeButton);
620  }
621
622  // Default Class
623  popup.className = swalClasses.popup;
624  if (params.toast) {
625    addClass([document.documentElement, document.body], swalClasses['toast-shown']);
626    addClass(popup, swalClasses.toast);
627  } else {
628    addClass(popup, swalClasses.modal);
629  }
630
631  // Custom Class
632  if (params.customClass) {
633    addClass(popup, params.customClass);
634  }
635
636  // Progress steps
637  var progressStepsContainer = getProgressSteps();
638  var currentProgressStep = parseInt(params.currentProgressStep === null ? sweetAlert.getQueueStep() : params.currentProgressStep, 10);
639  if (params.progressSteps.length) {
640    show(progressStepsContainer);
641    empty(progressStepsContainer);
642    if (currentProgressStep >= params.progressSteps.length) {
643      warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
644    }
645    params.progressSteps.forEach(function (step, index) {
646      var circle = document.createElement('li');
647      addClass(circle, swalClasses.progresscircle);
648      circle.innerHTML = step;
649      if (index === currentProgressStep) {
650        addClass(circle, swalClasses.activeprogressstep);
651      }
652      progressStepsContainer.appendChild(circle);
653      if (index !== params.progressSteps.length - 1) {
654        var line = document.createElement('li');
655        addClass(line, swalClasses.progressline);
656        line.style.width = params.progressStepsDistance;
657        progressStepsContainer.appendChild(line);
658      }
659    });
660  } else {
661    hide(progressStepsContainer);
662  }
663
664  // Icon
665  var icons = getIcons();
666  for (var _i2 = 0; _i2 < icons.length; _i2++) {
667    hide(icons[_i2]);
668  }
669  if (params.type) {
670    var validType = false;
671    for (var iconType in iconTypes) {
672      if (params.type === iconType) {
673        validType = true;
674        break;
675      }
676    }
677    if (!validType) {
678      error('Unknown alert type: ' + params.type);
679      return false;
680    }
681    var icon = popup.querySelector('.' + swalClasses.icon + '.' + iconTypes[params.type]);
682    show(icon);
683
684    // Animate icon
685    if (params.animation) {
686      switch (params.type) {
687        case 'success':
688          addClass(icon, 'swal2-animate-success-icon');
689          addClass(icon.querySelector('.swal2-success-line-tip'), 'swal2-animate-success-line-tip');
690          addClass(icon.querySelector('.swal2-success-line-long'), 'swal2-animate-success-line-long');
691          break;
692        case 'error':
693          addClass(icon, 'swal2-animate-error-icon');
694          addClass(icon.querySelector('.swal2-x-mark'), 'swal2-animate-x-mark');
695          break;
696        default:
697          break;
698      }
699    }
700  }
701
702  // Custom image
703  var image = getImage();
704  if (params.imageUrl) {
705    image.setAttribute('src', params.imageUrl);
706    image.setAttribute('alt', params.imageAlt);
707    show(image);
708
709    if (params.imageWidth) {
710      image.setAttribute('width', params.imageWidth);
711    } else {
712      image.removeAttribute('width');
713    }
714
715    if (params.imageHeight) {
716      image.setAttribute('height', params.imageHeight);
717    } else {
718      image.removeAttribute('height');
719    }
720
721    image.className = swalClasses.image;
722    if (params.imageClass) {
723      addClass(image, params.imageClass);
724    }
725  } else {
726    hide(image);
727  }
728
729  // Cancel button
730  if (params.showCancelButton) {
731    cancelButton.style.display = 'inline-block';
732  } else {
733    hide(cancelButton);
734  }
735
736  // Confirm button
737  if (params.showConfirmButton) {
738    removeStyleProperty(confirmButton, 'display');
739  } else {
740    hide(confirmButton);
741  }
742
743  // Buttons wrapper
744  if (!params.showConfirmButton && !params.showCancelButton) {
745    hide(buttonsWrapper);
746  } else {
747    show(buttonsWrapper);
748  }
749
750  // Edit text on confirm and cancel buttons
751  confirmButton.innerHTML = params.confirmButtonText;
752  cancelButton.innerHTML = params.cancelButtonText;
753
754  // ARIA labels for confirm and cancel buttons
755  confirmButton.setAttribute('aria-label', params.confirmButtonAriaLabel);
756  cancelButton.setAttribute('aria-label', params.cancelButtonAriaLabel);
757
758  // Set buttons to selected background colors
759  if (params.buttonsStyling) {
760    confirmButton.style.backgroundColor = params.confirmButtonColor;
761    cancelButton.style.backgroundColor = params.cancelButtonColor;
762  }
763
764  // Add buttons custom classes
765  confirmButton.className = swalClasses.confirm;
766  addClass(confirmButton, params.confirmButtonClass);
767  cancelButton.className = swalClasses.cancel;
768  addClass(cancelButton, params.cancelButtonClass);
769
770  // Buttons styling
771  if (params.buttonsStyling) {
772    addClass([confirmButton, cancelButton], swalClasses.styled);
773  } else {
774    removeClass([confirmButton, cancelButton], swalClasses.styled);
775
776    confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';
777    cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';
778  }
779
780  // CSS animation
781  if (params.animation === true) {
782    removeClass(popup, swalClasses.noanimation);
783  } else {
784    addClass(popup, swalClasses.noanimation);
785  }
786
787  // showLoaderOnConfirm && preConfirm
788  if (params.showLoaderOnConfirm && !params.preConfirm) {
789    warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://limonte.github.io/sweetalert2/#ajax-request');
790  }
791};
792
793/**
794 * Animations
795 *
796 * @param animation
797 * @param onBeforeOpen
798 * @param onComplete
799 */
800var openPopup = function openPopup(animation, onBeforeOpen, onComplete) {
801  var container = getContainer();
802  var popup = getPopup();
803
804  if (onBeforeOpen !== null && typeof onBeforeOpen === 'function') {
805    onBeforeOpen(popup);
806  }
807
808  if (animation) {
809    addClass(popup, swalClasses.show);
810    addClass(container, swalClasses.fade);
811    removeClass(popup, swalClasses.hide);
812  } else {
813    removeClass(popup, swalClasses.fade);
814  }
815  show(popup);
816
817  // scrolling is 'hidden' until animation is done, after that 'auto'
818  container.style.overflowY = 'hidden';
819  if (animationEndEvent && !hasClass(popup, swalClasses.noanimation)) {
820    popup.addEventListener(animationEndEvent, function swalCloseEventFinished() {
821      popup.removeEventListener(animationEndEvent, swalCloseEventFinished);
822      container.style.overflowY = 'auto';
823    });
824  } else {
825    container.style.overflowY = 'auto';
826  }
827
828  addClass([document.documentElement, document.body, container], swalClasses.shown);
829  if (isModal()) {
830    fixScrollbar();
831    iOSfix();
832  }
833  states.previousActiveElement = document.activeElement;
834  if (onComplete !== null && typeof onComplete === 'function') {
835    setTimeout(function () {
836      onComplete(popup);
837    });
838  }
839};
840
841var fixScrollbar = function fixScrollbar() {
842  // for queues, do not do this more than once
843  if (states.previousBodyPadding !== null) {
844    return;
845  }
846  // if the body has overflow
847  if (document.body.scrollHeight > window.innerHeight) {
848    // add padding so the content doesn't shift after removal of scrollbar
849    states.previousBodyPadding = document.body.style.paddingRight;
850    document.body.style.paddingRight = measureScrollbar() + 'px';
851  }
852};
853
854var undoScrollbar = function undoScrollbar() {
855  if (states.previousBodyPadding !== null) {
856    document.body.style.paddingRight = states.previousBodyPadding;
857    states.previousBodyPadding = null;
858  }
859};
860
861// Fix iOS scrolling http://stackoverflow.com/q/39626302/1331425
862var iOSfix = function iOSfix() {
863  var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
864  if (iOS && !hasClass(document.body, swalClasses.iosfix)) {
865    var offset = document.body.scrollTop;
866    document.body.style.top = offset * -1 + 'px';
867    addClass(document.body, swalClasses.iosfix);
868  }
869};
870
871var undoIOSfix = function undoIOSfix() {
872  if (hasClass(document.body, swalClasses.iosfix)) {
873    var offset = parseInt(document.body.style.top, 10);
874    removeClass(document.body, swalClasses.iosfix);
875    document.body.style.top = '';
876    document.body.scrollTop = offset * -1;
877  }
878};
879
880// SweetAlert entry point
881var sweetAlert = function sweetAlert() {
882  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
883    args[_key] = arguments[_key];
884  }
885
886  // Prevent run in Node env
887  if (typeof window === 'undefined') {
888    return;
889  }
890
891  if (typeof args[0] === 'undefined') {
892    error('SweetAlert2 expects at least 1 attribute!');
893    return false;
894  }
895
896  var params = _extends({}, popupParams);
897
898  switch (_typeof(args[0])) {
899    case 'string':
900      params.title = args[0];
901      params.html = args[1];
902      params.type = args[2];
903
904      break;
905
906    case 'object':
907      showWarningsForParams(args[0]);
908      _extends(params, args[0]);
909      params.extraParams = args[0].extraParams;
910
911      if (params.input === 'email' && params.inputValidator === null) {
912        var inputValidator = function inputValidator(email) {
913          return new Promise(function (resolve, reject) {
914            var emailRegex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/;
915            if (emailRegex.test(email)) {
916              resolve();
917            } else {
918              reject('Invalid email address');
919            }
920          });
921        };
922        params.inputValidator = params.expectRejections ? inputValidator : sweetAlert.adaptInputValidator(inputValidator);
923      }
924
925      if (params.input === 'url' && params.inputValidator === null) {
926        var _inputValidator = function _inputValidator(url) {
927          return new Promise(function (resolve, reject) {
928            // taken from https://stackoverflow.com/a/3809435/1331425
929            var urlRegex = /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)$/;
930            if (urlRegex.test(url)) {
931              resolve();
932            } else {
933              reject('Invalid URL');
934            }
935          });
936        };
937        params.inputValidator = params.expectRejections ? _inputValidator : sweetAlert.adaptInputValidator(_inputValidator);
938      }
939      break;
940
941    default:
942      error('Unexpected type of argument! Expected "string" or "object", got ' + _typeof(args[0]));
943      return false;
944  }
945
946  setParameters(params);
947
948  var container = getContainer();
949  var popup = getPopup();
950
951  return new Promise(function (resolve, reject) {
952    // functions to handle all resolving/rejecting/settling
953    var succeedWith = function succeedWith(value) {
954      sweetAlert.closePopup(params.onClose);
955      if (params.useRejections) {
956        resolve(value);
957      } else {
958        resolve({ value: value });
959      }
960    };
961    var dismissWith = function dismissWith(dismiss) {
962      sweetAlert.closePopup(params.onClose);
963      if (params.useRejections) {
964        reject(dismiss);
965      } else {
966        resolve({ dismiss: dismiss });
967      }
968    };
969    var errorWith = function errorWith(error$$1) {
970      sweetAlert.closePopup(params.onClose);
971      reject(error$$1);
972    };
973
974    // Close on timer
975    if (params.timer) {
976      popup.timeout = setTimeout(function () {
977        return dismissWith('timer');
978      }, params.timer);
979    }
980
981    // Get input element by specified type or, if type isn't specified, by params.input
982    var getInput = function getInput(inputType) {
983      inputType = inputType || params.input;
984      if (!inputType) {
985        return null;
986      }
987      switch (inputType) {
988        case 'select':
989        case 'textarea':
990        case 'file':
991          return getChildByClass(popup, swalClasses[inputType]);
992        case 'checkbox':
993          return popup.querySelector('.' + swalClasses.checkbox + ' input');
994        case 'radio':
995          return popup.querySelector('.' + swalClasses.radio + ' input:checked') || popup.querySelector('.' + swalClasses.radio + ' input:first-child');
996        case 'range':
997          return popup.querySelector('.' + swalClasses.range + ' input');
998        default:
999          return getChildByClass(popup, swalClasses.input);
1000      }
1001    };
1002
1003    // Get the value of the popup input
1004    var getInputValue = function getInputValue() {
1005      var input = getInput();
1006      if (!input) {
1007        return null;
1008      }
1009      switch (params.input) {
1010        case 'checkbox':
1011          return input.checked ? 1 : 0;
1012        case 'radio':
1013          return input.checked ? input.value : null;
1014        case 'file':
1015          return input.files.length ? input.files[0] : null;
1016        default:
1017          return params.inputAutoTrim ? input.value.trim() : input.value;
1018      }
1019    };
1020
1021    // input autofocus
1022    if (params.input) {
1023      setTimeout(function () {
1024        var input = getInput();
1025        if (input) {
1026          focusInput(input);
1027        }
1028      }, 0);
1029    }
1030
1031    var confirm = function confirm(value) {
1032      if (params.showLoaderOnConfirm) {
1033        sweetAlert.showLoading();
1034      }
1035
1036      if (params.preConfirm) {
1037        sweetAlert.resetValidationError();
1038        var preConfirmPromise = Promise.resolve().then(function () {
1039          return params.preConfirm(value, params.extraParams);
1040        });
1041        if (params.expectRejections) {
1042          preConfirmPromise.then(function (preConfirmValue) {
1043            return succeedWith(preConfirmValue || value);
1044          }, function (validationError) {
1045            sweetAlert.hideLoading();
1046            if (validationError) {
1047              sweetAlert.showValidationError(validationError);
1048            }
1049          });
1050        } else {
1051          preConfirmPromise.then(function (preConfirmValue) {
1052            if (isVisible(getValidationError())) {
1053              sweetAlert.hideLoading();
1054            } else {
1055              succeedWith(preConfirmValue || value);
1056            }
1057          }, function (error$$1) {
1058            return errorWith(error$$1);
1059          });
1060        }
1061      } else {
1062        succeedWith(value);
1063      }
1064    };
1065
1066    // Mouse interactions
1067    var onButtonEvent = function onButtonEvent(event) {
1068      var e = event || window.event;
1069      var target = e.target || e.srcElement;
1070      var confirmButton = getConfirmButton();
1071      var cancelButton = getCancelButton();
1072      var targetedConfirm = confirmButton && (confirmButton === target || confirmButton.contains(target));
1073      var targetedCancel = cancelButton && (cancelButton === target || cancelButton.contains(target));
1074
1075      switch (e.type) {
1076        case 'mouseover':
1077        case 'mouseup':
1078          if (params.buttonsStyling) {
1079            if (targetedConfirm) {
1080              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.1);
1081            } else if (targetedCancel) {
1082              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.1);
1083            }
1084          }
1085          break;
1086        case 'mouseout':
1087          if (params.buttonsStyling) {
1088            if (targetedConfirm) {
1089              confirmButton.style.backgroundColor = params.confirmButtonColor;
1090            } else if (targetedCancel) {
1091              cancelButton.style.backgroundColor = params.cancelButtonColor;
1092            }
1093          }
1094          break;
1095        case 'mousedown':
1096          if (params.buttonsStyling) {
1097            if (targetedConfirm) {
1098              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.2);
1099            } else if (targetedCancel) {
1100              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.2);
1101            }
1102          }
1103          break;
1104        case 'click':
1105          // Clicked 'confirm'
1106          if (targetedConfirm && sweetAlert.isVisible()) {
1107            sweetAlert.disableButtons();
1108            if (params.input) {
1109              var inputValue = getInputValue();
1110
1111              if (params.inputValidator) {
1112                sweetAlert.disableInput();
1113                var validationPromise = Promise.resolve().then(function () {
1114                  return params.inputValidator(inputValue, params.extraParams);
1115                });
1116                if (params.expectRejections) {
1117                  validationPromise.then(function () {
1118                    sweetAlert.enableButtons();
1119                    sweetAlert.enableInput();
1120                    confirm(inputValue);
1121                  }, function (validationError) {
1122                    sweetAlert.enableButtons();
1123                    sweetAlert.enableInput();
1124                    if (validationError) {
1125                      sweetAlert.showValidationError(validationError);
1126                    }
1127                  });
1128                } else {
1129                  validationPromise.then(function (validationError) {
1130                    sweetAlert.enableButtons();
1131                    sweetAlert.enableInput();
1132                    if (validationError) {
1133                      sweetAlert.showValidationError(validationError);
1134                    } else {
1135                      confirm(inputValue);
1136                    }
1137                  }, function (error$$1) {
1138                    return errorWith(error$$1);
1139                  });
1140                }
1141              } else {
1142                confirm(inputValue);
1143              }
1144            } else {
1145              confirm(true);
1146            }
1147
1148            // Clicked 'cancel'
1149          } else if (targetedCancel && sweetAlert.isVisible()) {
1150            sweetAlert.disableButtons();
1151            dismissWith('cancel');
1152          }
1153          break;
1154        default:
1155      }
1156    };
1157
1158    var buttons = popup.querySelectorAll('button');
1159    for (var i = 0; i < buttons.length; i++) {
1160      buttons[i].onclick = onButtonEvent;
1161      buttons[i].onmouseover = onButtonEvent;
1162      buttons[i].onmouseout = onButtonEvent;
1163      buttons[i].onmousedown = onButtonEvent;
1164    }
1165
1166    // Closing popup by close button
1167    getCloseButton().onclick = function () {
1168      dismissWith('close');
1169    };
1170
1171    if (params.toast) {
1172      // Closing popup by overlay click
1173      popup.onclick = function (e) {
1174        if (e.target !== popup || params.showConfirmButton || params.showCancelButton) {
1175          return;
1176        }
1177        if (params.allowOutsideClick) {
1178          sweetAlert.closePopup(params.onClose);
1179          dismissWith('overlay');
1180        }
1181      };
1182    } else {
1183      var ignoreOutsideClick = false;
1184
1185      // Ignore click events that had mousedown on the popup but mouseup on the container
1186      // This can happen when the user drags a slider
1187      popup.onmousedown = function () {
1188        container.onmouseup = function (e) {
1189          container.onmouseup = undefined;
1190          // We only check if the mouseup target is the container because usually it doesn't
1191          // have any other direct children aside of the popup
1192          if (e.target === container) {
1193            ignoreOutsideClick = true;
1194          }
1195        };
1196      };
1197
1198      // Ignore click events that had mousedown on the container but mouseup on the popup
1199      container.onmousedown = function () {
1200        popup.onmouseup = function (e) {
1201          popup.onmouseup = undefined;
1202          // We also need to check if the mouseup target is a child of the popup
1203          if (e.target === popup || popup.contains(e.target)) {
1204            ignoreOutsideClick = true;
1205          }
1206        };
1207      };
1208
1209      container.onclick = function (e) {
1210        if (ignoreOutsideClick) {
1211          ignoreOutsideClick = false;
1212          return;
1213        }
1214        if (e.target !== container) {
1215          return;
1216        }
1217        if (params.allowOutsideClick) {
1218          dismissWith('overlay');
1219        }
1220      };
1221    }
1222
1223    var buttonsWrapper = getButtonsWrapper();
1224    var confirmButton = getConfirmButton();
1225    var cancelButton = getCancelButton();
1226
1227    // Reverse buttons (Confirm on the right side)
1228    if (params.reverseButtons) {
1229      confirmButton.parentNode.insertBefore(cancelButton, confirmButton);
1230    } else {
1231      confirmButton.parentNode.insertBefore(confirmButton, cancelButton);
1232    }
1233
1234    // Focus handling
1235    var setFocus = function setFocus(index, increment) {
1236      var focusableElements = getFocusableElements(params.focusCancel);
1237      // search for visible elements and select the next possible match
1238      for (var _i3 = 0; _i3 < focusableElements.length; _i3++) {
1239        index = index + increment;
1240
1241        // rollover to first item
1242        if (index === focusableElements.length) {
1243          index = 0;
1244
1245          // go to last item
1246        } else if (index === -1) {
1247          index = focusableElements.length - 1;
1248        }
1249
1250        // determine if element is visible
1251        var el = focusableElements[index];
1252        if (isVisible(el)) {
1253          return el.focus();
1254        }
1255      }
1256    };
1257
1258    var handleKeyDown = function handleKeyDown(event) {
1259      var e = event || window.event;
1260
1261      var arrowKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Left', 'Right', 'Up', 'Down' // IE11
1262      ];
1263
1264      if (e.key === 'Enter' && !e.isComposing) {
1265        if (e.target === getInput()) {
1266          if (e.target.tagName.toLowerCase() === 'textarea') {
1267            return; // do not submit
1268          }
1269
1270          sweetAlert.clickConfirm();
1271          e.preventDefault();
1272        }
1273
1274        // TAB
1275      } else if (e.key === 'Tab') {
1276        var targetElement = e.target || e.srcElement;
1277
1278        var focusableElements = getFocusableElements(params.focusCancel);
1279        var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.
1280        for (var _i4 = 0; _i4 < focusableElements.length; _i4++) {
1281          if (targetElement === focusableElements[_i4]) {
1282            btnIndex = _i4;
1283            break;
1284          }
1285        }
1286
1287        if (!e.shiftKey) {
1288          // Cycle to the next button
1289          setFocus(btnIndex, 1);
1290        } else {
1291          // Cycle to the prev button
1292          setFocus(btnIndex, -1);
1293        }
1294        e.stopPropagation();
1295        e.preventDefault();
1296
1297        // ARROWS - switch focus between buttons
1298      } else if (arrowKeys.indexOf(e.key) !== -1) {
1299        // focus Cancel button if Confirm button is currently focused
1300        if (document.activeElement === confirmButton && isVisible(cancelButton)) {
1301          cancelButton.focus();
1302          // and vice versa
1303        } else if (document.activeElement === cancelButton && isVisible(confirmButton)) {
1304          confirmButton.focus();
1305        }
1306
1307        // ESC
1308      } else if ((e.key === 'Escape' || e.key === 'Esc') && params.allowEscapeKey === true) {
1309        dismissWith('esc');
1310      }
1311    };
1312
1313    if (params.toast && windowOnkeydownOverridden) {
1314      window.onkeydown = previousWindowKeyDown;
1315      windowOnkeydownOverridden = false;
1316    }
1317
1318    if (!params.toast && !windowOnkeydownOverridden) {
1319      previousWindowKeyDown = window.onkeydown;
1320      windowOnkeydownOverridden = true;
1321      window.onkeydown = handleKeyDown;
1322    }
1323
1324    // Loading state
1325    if (params.buttonsStyling) {
1326      confirmButton.style.borderLeftColor = params.confirmButtonColor;
1327      confirmButton.style.borderRightColor = params.confirmButtonColor;
1328    }
1329
1330    /**
1331     * Show spinner instead of Confirm button and disable Cancel button
1332     */
1333    sweetAlert.hideLoading = sweetAlert.disableLoading = function () {
1334      if (!params.showConfirmButton) {
1335        hide(confirmButton);
1336        if (!params.showCancelButton) {
1337          hide(getButtonsWrapper());
1338        }
1339      }
1340      removeClass([popup, buttonsWrapper], swalClasses.loading);
1341      popup.removeAttribute('aria-busy');
1342      confirmButton.disabled = false;
1343      cancelButton.disabled = false;
1344    };
1345
1346    sweetAlert.getTitle = function () {
1347      return getTitle();
1348    };
1349    sweetAlert.getContent = function () {
1350      return getContent();
1351    };
1352    sweetAlert.getInput = function () {
1353      return getInput();
1354    };
1355    sweetAlert.getImage = function () {
1356      return getImage();
1357    };
1358    sweetAlert.getButtonsWrapper = function () {
1359      return getButtonsWrapper();
1360    };
1361    sweetAlert.getConfirmButton = function () {
1362      return getConfirmButton();
1363    };
1364    sweetAlert.getCancelButton = function () {
1365      return getCancelButton();
1366    };
1367
1368    sweetAlert.enableButtons = function () {
1369      confirmButton.disabled = false;
1370      cancelButton.disabled = false;
1371    };
1372
1373    sweetAlert.disableButtons = function () {
1374      confirmButton.disabled = true;
1375      cancelButton.disabled = true;
1376    };
1377
1378    sweetAlert.enableConfirmButton = function () {
1379      confirmButton.disabled = false;
1380    };
1381
1382    sweetAlert.disableConfirmButton = function () {
1383      confirmButton.disabled = true;
1384    };
1385
1386    sweetAlert.enableInput = function () {
1387      var input = getInput();
1388      if (!input) {
1389        return false;
1390      }
1391      if (input.type === 'radio') {
1392        var radiosContainer = input.parentNode.parentNode;
1393        var radios = radiosContainer.querySelectorAll('input');
1394        for (var _i5 = 0; _i5 < radios.length; _i5++) {
1395          radios[_i5].disabled = false;
1396        }
1397      } else {
1398        input.disabled = false;
1399      }
1400    };
1401
1402    sweetAlert.disableInput = function () {
1403      var input = getInput();
1404      if (!input) {
1405        return false;
1406      }
1407      if (input && input.type === 'radio') {
1408        var radiosContainer = input.parentNode.parentNode;
1409        var radios = radiosContainer.querySelectorAll('input');
1410        for (var _i6 = 0; _i6 < radios.length; _i6++) {
1411          radios[_i6].disabled = true;
1412        }
1413      } else {
1414        input.disabled = true;
1415      }
1416    };
1417
1418    // Show block with validation error
1419    sweetAlert.showValidationError = function (error$$1) {
1420      var validationError = getValidationError();
1421      validationError.innerHTML = error$$1;
1422      show(validationError);
1423
1424      var input = getInput();
1425      if (input) {
1426        input.setAttribute('aria-invalid', true);
1427        input.setAttribute('aria-describedBy', swalClasses.validationerror);
1428        focusInput(input);
1429        addClass(input, swalClasses.inputerror);
1430      }
1431    };
1432
1433    // Hide block with validation error
1434    sweetAlert.resetValidationError = function () {
1435      var validationError = getValidationError();
1436      hide(validationError);
1437
1438      var input = getInput();
1439      if (input) {
1440        input.removeAttribute('aria-invalid');
1441        input.removeAttribute('aria-describedBy');
1442        removeClass(input, swalClasses.inputerror);
1443      }
1444    };
1445
1446    sweetAlert.getProgressSteps = function () {
1447      return params.progressSteps;
1448    };
1449
1450    sweetAlert.setProgressSteps = function (progressSteps) {
1451      params.progressSteps = progressSteps;
1452      setParameters(params);
1453    };
1454
1455    sweetAlert.showProgressSteps = function () {
1456      show(getProgressSteps());
1457    };
1458
1459    sweetAlert.hideProgressSteps = function () {
1460      hide(getProgressSteps());
1461    };
1462
1463    sweetAlert.enableButtons();
1464    sweetAlert.hideLoading();
1465    sweetAlert.resetValidationError();
1466
1467    if (params.input) {
1468      addClass(document.body, swalClasses['has-input']);
1469    }
1470
1471    // inputs
1472    var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];
1473    var input = void 0;
1474    for (var _i7 = 0; _i7 < inputTypes.length; _i7++) {
1475      var inputClass = swalClasses[inputTypes[_i7]];
1476      var inputContainer = getChildByClass(popup, inputClass);
1477      input = getInput(inputTypes[_i7]);
1478
1479      // set attributes
1480      if (input) {
1481        for (var j in input.attributes) {
1482          if (input.attributes.hasOwnProperty(j)) {
1483            var attrName = input.attributes[j].name;
1484            if (attrName !== 'type' && attrName !== 'value') {
1485              input.removeAttribute(attrName);
1486            }
1487          }
1488        }
1489        for (var attr in params.inputAttributes) {
1490          input.setAttribute(attr, params.inputAttributes[attr]);
1491        }
1492      }
1493
1494      // set class
1495      inputContainer.className = inputClass;
1496      if (params.inputClass) {
1497        addClass(inputContainer, params.inputClass);
1498      }
1499
1500      hide(inputContainer);
1501    }
1502
1503    var populateInputOptions = void 0;
1504    switch (params.input) {
1505      case 'text':
1506      case 'email':
1507      case 'password':
1508      case 'number':
1509      case 'tel':
1510      case 'url':
1511        input = getChildByClass(popup, swalClasses.input);
1512        input.value = params.inputValue;
1513        input.placeholder = params.inputPlaceholder;
1514        input.type = params.input;
1515        show(input);
1516        break;
1517      case 'file':
1518        input = getChildByClass(popup, swalClasses.file);
1519        input.placeholder = params.inputPlaceholder;
1520        input.type = params.input;
1521        show(input);
1522        break;
1523      case 'range':
1524        var range = getChildByClass(popup, swalClasses.range);
1525        var rangeInput = range.querySelector('input');
1526        var rangeOutput = range.querySelector('output');
1527        rangeInput.value = params.inputValue;
1528        rangeInput.type = params.input;
1529        rangeOutput.value = params.inputValue;
1530        show(range);
1531        break;
1532      case 'select':
1533        var select = getChildByClass(popup, swalClasses.select);
1534        select.innerHTML = '';
1535        if (params.inputPlaceholder) {
1536          var placeholder = document.createElement('option');
1537          placeholder.innerHTML = params.inputPlaceholder;
1538          placeholder.value = '';
1539          placeholder.disabled = true;
1540          placeholder.selected = true;
1541          select.appendChild(placeholder);
1542        }
1543        populateInputOptions = function populateInputOptions(inputOptions) {
1544          for (var optionValue in inputOptions) {
1545            var option = document.createElement('option');
1546            option.value = optionValue;
1547            option.innerHTML = inputOptions[optionValue];
1548            if (params.inputValue.toString() === optionValue) {
1549              option.selected = true;
1550            }
1551            select.appendChild(option);
1552          }
1553          show(select);
1554          select.focus();
1555        };
1556        break;
1557      case 'radio':
1558        var radio = getChildByClass(popup, swalClasses.radio);
1559        radio.innerHTML = '';
1560        populateInputOptions = function populateInputOptions(inputOptions) {
1561          for (var radioValue in inputOptions) {
1562            var radioInput = document.createElement('input');
1563            var radioLabel = document.createElement('label');
1564            var radioLabelSpan = document.createElement('span');
1565            radioInput.type = 'radio';
1566            radioInput.name = swalClasses.radio;
1567            radioInput.value = radioValue;
1568            if (params.inputValue.toString() === radioValue) {
1569              radioInput.checked = true;
1570            }
1571            radioLabelSpan.innerHTML = inputOptions[radioValue];
1572            radioLabel.appendChild(radioInput);
1573            radioLabel.appendChild(radioLabelSpan);
1574            radioLabel.for = radioInput.id;
1575            radio.appendChild(radioLabel);
1576          }
1577          show(radio);
1578          var radios = radio.querySelectorAll('input');
1579          if (radios.length) {
1580            radios[0].focus();
1581          }
1582        };
1583        break;
1584      case 'checkbox':
1585        var checkbox = getChildByClass(popup, swalClasses.checkbox);
1586        var checkboxInput = getInput('checkbox');
1587        checkboxInput.type = 'checkbox';
1588        checkboxInput.value = 1;
1589        checkboxInput.id = swalClasses.checkbox;
1590        checkboxInput.checked = Boolean(params.inputValue);
1591        var label = checkbox.getElementsByTagName('span');
1592        if (label.length) {
1593          checkbox.removeChild(label[0]);
1594        }
1595        label = document.createElement('span');
1596        label.innerHTML = params.inputPlaceholder;
1597        checkbox.appendChild(label);
1598        show(checkbox);
1599        break;
1600      case 'textarea':
1601        var textarea = getChildByClass(popup, swalClasses.textarea);
1602        textarea.value = params.inputValue;
1603        textarea.placeholder = params.inputPlaceholder;
1604        show(textarea);
1605        break;
1606      case null:
1607        break;
1608      default:
1609        error('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "' + params.input + '"');
1610        break;
1611    }
1612
1613    if (params.input === 'select' || params.input === 'radio') {
1614      if (params.inputOptions instanceof Promise) {
1615        sweetAlert.showLoading();
1616        params.inputOptions.then(function (inputOptions) {
1617          sweetAlert.hideLoading();
1618          populateInputOptions(inputOptions);
1619        });
1620      } else if (_typeof(params.inputOptions) === 'object') {
1621        populateInputOptions(params.inputOptions);
1622      } else {
1623        error('Unexpected type of inputOptions! Expected object or Promise, got ' + _typeof(params.inputOptions));
1624      }
1625    }
1626
1627    openPopup(params.animation, params.onBeforeOpen, params.onOpen);
1628
1629    if (!params.toast) {
1630      if (!params.allowEnterKey) {
1631        if (document.activeElement) {
1632          document.activeElement.blur();
1633        }
1634      } else if (params.focusCancel && isVisible(cancelButton)) {
1635        cancelButton.focus();
1636      } else if (params.focusConfirm && isVisible(confirmButton)) {
1637        confirmButton.focus();
1638      } else {
1639        setFocus(-1, 1);
1640      }
1641    }
1642
1643    // fix scroll
1644    getContainer().scrollTop = 0;
1645  });
1646};
1647
1648/*
1649 * Global function to determine if swal2 popup is shown
1650 */
1651sweetAlert.isVisible = function () {
1652  return !!getPopup();
1653};
1654
1655/*
1656 * Global function for chaining sweetAlert popups
1657 */
1658sweetAlert.queue = function (steps) {
1659  queue = steps;
1660  var resetQueue = function resetQueue() {
1661    queue = [];
1662    document.body.removeAttribute('data-swal2-queue-step');
1663  };
1664  var queueResult = [];
1665  return new Promise(function (resolve, reject) {
1666    (function step(i, callback) {
1667      if (i < queue.length) {
1668        document.body.setAttribute('data-swal2-queue-step', i);
1669
1670        sweetAlert(queue[i]).then(function (result) {
1671          if (typeof result.value !== 'undefined') {
1672            queueResult.push(result.value);
1673            step(i + 1, callback);
1674          } else {
1675            resetQueue();
1676            resolve({ dismiss: result.dismiss });
1677          }
1678        });
1679      } else {
1680        resetQueue();
1681        resolve({ value: queueResult });
1682      }
1683    })(0);
1684  });
1685};
1686
1687/*
1688 * Global function for getting the index of current popup in queue
1689 */
1690sweetAlert.getQueueStep = function () {
1691  return document.body.getAttribute('data-swal2-queue-step');
1692};
1693
1694/*
1695 * Global function for inserting a popup to the queue
1696 */
1697sweetAlert.insertQueueStep = function (step, index) {
1698  if (index && index < queue.length) {
1699    return queue.splice(index, 0, step);
1700  }
1701  return queue.push(step);
1702};
1703
1704/*
1705 * Global function for deleting a popup from the queue
1706 */
1707sweetAlert.deleteQueueStep = function (index) {
1708  if (typeof queue[index] !== 'undefined') {
1709    queue.splice(index, 1);
1710  }
1711};
1712
1713/*
1714 * Global function to close sweetAlert
1715 */
1716sweetAlert.close = sweetAlert.closePopup = sweetAlert.closeModal = sweetAlert.closeToast = function (onComplete) {
1717  var container = getContainer();
1718  var popup = getPopup();
1719  if (!popup) {
1720    return;
1721  }
1722  removeClass(popup, swalClasses.show);
1723  addClass(popup, swalClasses.hide);
1724  clearTimeout(popup.timeout);
1725
1726  if (!isToast()) {
1727    resetPrevState();
1728    window.onkeydown = previousWindowKeyDown;
1729    windowOnkeydownOverridden = false;
1730  }
1731
1732  var removePopupAndResetState = function removePopupAndResetState() {
1733    if (container.parentNode) {
1734      container.parentNode.removeChild(container);
1735    }
1736    removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['no-backdrop'], swalClasses['has-input'], swalClasses['toast-shown']]);
1737
1738    if (isModal()) {
1739      undoScrollbar();
1740      undoIOSfix();
1741    }
1742  };
1743
1744  // If animation is supported, animate
1745  if (animationEndEvent && !hasClass(popup, swalClasses.noanimation)) {
1746    popup.addEventListener(animationEndEvent, function swalCloseEventFinished() {
1747      popup.removeEventListener(animationEndEvent, swalCloseEventFinished);
1748      if (hasClass(popup, swalClasses.hide)) {
1749        removePopupAndResetState();
1750      }
1751    });
1752  } else {
1753    // Otherwise, remove immediately
1754    removePopupAndResetState();
1755  }
1756  if (onComplete !== null && typeof onComplete === 'function') {
1757    setTimeout(function () {
1758      onComplete(popup);
1759    });
1760  }
1761};
1762
1763/*
1764 * Global function to click 'Confirm' button
1765 */
1766sweetAlert.clickConfirm = function () {
1767  return getConfirmButton().click();
1768};
1769
1770/*
1771 * Global function to click 'Cancel' button
1772 */
1773sweetAlert.clickCancel = function () {
1774  return getCancelButton().click();
1775};
1776
1777/**
1778 * Show spinner instead of Confirm button and disable Cancel button
1779 */
1780sweetAlert.showLoading = sweetAlert.enableLoading = function () {
1781  var popup = getPopup();
1782  if (!popup) {
1783    sweetAlert('');
1784  }
1785  popup = getPopup();
1786  var buttonsWrapper = getButtonsWrapper();
1787  var confirmButton = getConfirmButton();
1788  var cancelButton = getCancelButton();
1789
1790  show(buttonsWrapper);
1791  show(confirmButton, 'inline-block');
1792  addClass([popup, buttonsWrapper], swalClasses.loading);
1793  confirmButton.disabled = true;
1794  cancelButton.disabled = true;
1795
1796  popup.setAttribute('aria-busy', true);
1797  popup.focus();
1798};
1799
1800/**
1801 * Is valid parameter
1802 * @param {String} paramName
1803 */
1804sweetAlert.isValidParameter = function (paramName) {
1805  return defaultParams.hasOwnProperty(paramName) || paramName === 'extraParams';
1806};
1807
1808/**
1809 * Is deprecated parameter
1810 * @param {String} paramName
1811 */
1812sweetAlert.isDeprecatedParameter = function (paramName) {
1813  return deprecatedParams.indexOf(paramName) !== -1;
1814};
1815
1816/**
1817 * Set default params for each popup
1818 * @param {Object} userParams
1819 */
1820sweetAlert.setDefaults = function (userParams) {
1821  if (!userParams || (typeof userParams === 'undefined' ? 'undefined' : _typeof(userParams)) !== 'object') {
1822    return error('the argument for setDefaults() is required and has to be a object');
1823  }
1824
1825  showWarningsForParams(userParams);
1826
1827  // assign valid params from userParams to popupParams
1828  for (var param in userParams) {
1829    if (sweetAlert.isValidParameter(param)) {
1830      popupParams[param] = userParams[param];
1831    }
1832  }
1833};
1834
1835/**
1836 * Reset default params for each popup
1837 */
1838sweetAlert.resetDefaults = function () {
1839  popupParams = _extends({}, defaultParams);
1840};
1841
1842/**
1843 * Adapt a legacy inputValidator for use with expectRejections=false
1844 */
1845sweetAlert.adaptInputValidator = function (legacyValidator) {
1846  return function adaptedInputValidator(inputValue, extraParams) {
1847    return legacyValidator.call(this, inputValue, extraParams).then(function () {
1848      return undefined;
1849    }, function (validationError) {
1850      return validationError;
1851    });
1852  };
1853};
1854
1855sweetAlert.noop = function () {};
1856
1857sweetAlert.version = '7.2.0';
1858
1859sweetAlert.default = sweetAlert;
1860
1861/**
1862 * Set default params if `window._swalDefaults` is an object
1863 */
1864if (typeof window !== 'undefined' && _typeof(window._swalDefaults) === 'object') {
1865  sweetAlert.setDefaults(window._swalDefaults);
1866}
1867
1868return sweetAlert;
1869
1870})));
1871if (typeof window !== 'undefined' && window.Sweetalert2) window.sweetAlert = window.swal = window.Sweetalert2;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.