! function(t, e) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? module.exports = e(require("jquery")) : t.bootbox = e(t.jQuery)
}(this, function e(p, u) {
    "use strict";
    var r, n, i, l;
    Object.keys || (Object.keys = (r = Object.prototype.hasOwnProperty, n = !{
        toString: null
    }.propertyIsEnumerable("toString"), l = (i = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"]).length, function(t) {
        if ("function" != typeof t && ("object" != typeof t || null === t)) throw new TypeError("Object.keys called on non-object");
        var e, o, a = [];
        for (e in t) r.call(t, e) && a.push(e);
        if (n)
            for (o = 0; o < l; o++) r.call(t, i[o]) && a.push(i[o]);
        return a
    }));
    var d = {};
    d.VERSION = "5.0.0";
    var b = {
            en: {
                OK: "OK",
                CANCEL: "Cancel",
                CONFIRM: "OK"
            }
        },
        f = {
            dialog: '<div class="bootbox modal" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-body"><div class="bootbox-body"></div></div></div></div></div>',
            header: '<div class="modal-header"><h5 class="modal-title"></h5></div>',
            footer: '<div class="modal-footer"></div>',
            closeButton: '<button type="button" class="bootbox-close-button close" aria-hidden="true">&times;</button>',
            form: '<form class="bootbox-form"></form>',
            button: '<button type="button" class="btn"></button>',
            option: "<option></option>",
            promptMessage: '<div class="bootbox-prompt-message"></div>',
            inputs: {
                text: '<input class="bootbox-input bootbox-input-text form-control" autocomplete="off" type="text" />',
                textarea: '<textarea class="bootbox-input bootbox-input-textarea form-control"></textarea>',
                email: '<input class="bootbox-input bootbox-input-email form-control" autocomplete="off" type="email" />',
                select: '<select class="bootbox-input bootbox-input-select form-control"></select>',
                checkbox: '<div class="form-check checkbox"><label class="form-check-label"><input class="form-check-input bootbox-input bootbox-input-checkbox" type="checkbox" /></label></div>',
                radio: '<div class="form-check radio"><label class="form-check-label"><input class="form-check-input bootbox-input bootbox-input-radio" type="radio" name="bootbox-radio" /></label></div>',
                date: '<input class="bootbox-input bootbox-input-date form-control" autocomplete="off" type="date" />',
                time: '<input class="bootbox-input bootbox-input-time form-control" autocomplete="off" type="time" />',
                number: '<input class="bootbox-input bootbox-input-number form-control" autocomplete="off" type="number" />',
                password: '<input class="bootbox-input bootbox-input-password form-control" autocomplete="off" type="password" />',
                range: '<input class="bootbox-input bootbox-input-range form-control-range" autocomplete="off" type="range" />'
            }
        },
        m = {
            locale: "en",
            backdrop: "static",
            animate: !0,
            className: null,
            closeButton: !0,
            show: !0,
            container: "body",
            value: "",
            inputType: "text",
            swapButtonOrder: !1,
            centerVertical: !1,
            multiple: !1,
            scrollable: !1
        };

    function c(t, e, o) {
        return p.extend(!0, {}, t, function(t, e) {
            var o = t.length,
                a = {};
            if (o < 1 || 2 < o) throw new Error("Invalid argument length");
            return 2 === o || "string" == typeof t[0] ? (a[e[0]] = t[0], a[e[1]] = t[1]) : a = t[0], a
        }(e, o))
    }

    function h(t, e, o, a) {
        var r;
        a && a[0] && (r = a[0].locale || m.locale, (a[0].swapButtonOrder || m.swapButtonOrder) && (e = e.reverse()));
        var n, i, l, s = {
            className: "bootbox-" + t,
            buttons: function(t, e) {
                for (var o = {}, a = 0, r = t.length; a < r; a++) {
                    var n = t[a],
                        i = n.toLowerCase(),
                        l = n.toUpperCase();
                    o[i] = {
                        label: (s = l, (c = b[e]) ? c[s] : b.en[s])
                    }
                }
                var s, c;
                return o
            }(e, r)
        };
        return n = c(s, a, o), l = {}, v(i = e, function(t, e) {
            l[e] = !0
        }), v(n.buttons, function(t) {
            if (l[t] === u) throw new Error('button key "' + t + '" is not allowed (options are ' + i.join(" ") + ")")
        }), n
    }

    function w(t) {
        return Object.keys(t).length
    }

    function v(t, o) {
        var a = 0;
        p.each(t, function(t, e) {
            o(t, e, a++)
        })
    }

    function g(t) {
        t.data.dialog.find(".bootbox-accept").first().trigger("focus")
    }

    function y(t) {
        t.target === t.data.dialog[0] && t.data.dialog.remove()
    }

    function x(t) {
        t.target === t.data.dialog[0] && (t.data.dialog.off("escape.close.bb"), t.data.dialog.off("click"))
    }

    function k(t, e, o) {
        t.stopPropagation(), t.preventDefault(), p.isFunction(o) && !1 === o.call(e, t) || e.modal("hide")
    }

    function E(t) {
        return /([01][0-9]|2[0-3]):[0-5][0-9]?:[0-5][0-9]/.test(t)
    }

    function O(t) {
        return /(\d{4})-(\d{2})-(\d{2})/.test(t)
    }
    return d.locales = function(t) {
        return t ? b[t] : b
    }, d.addLocale = function(t, o) {
        return p.each(["OK", "CANCEL", "CONFIRM"], function(t, e) {
            if (!o[e]) throw new Error('Please supply a translation for "' + e + '"')
        }), b[t] = {
            OK: o.OK,
            CANCEL: o.CANCEL,
            CONFIRM: o.CONFIRM
        }, d
    }, d.removeLocale = function(t) {
        if ("en" === t) throw new Error('"en" is used as the default and fallback locale and cannot be removed.');
        return delete b[t], d
    }, d.setLocale = function(t) {
        return d.setDefaults("locale", t)
    }, d.setDefaults = function() {
        var t = {};
        return 2 === arguments.length ? t[arguments[0]] = arguments[1] : t = arguments[0], p.extend(m, t), d
    }, d.hideAll = function() {
        return p(".bootbox").modal("hide"), d
    }, d.init = function(t) {
        return e(t || p)
    }, d.dialog = function(t) {
        if (p.fn.modal === u) throw new Error('"$.fn.modal" is not defined; please double check you have included the Bootstrap JavaScript library. See https://getbootstrap.com/docs/4.4/getting-started/javascript/ for more details.');
        if (t = function(r) {
                var n, i;
                if ("object" != typeof r) throw new Error("Please supply an object of options");
                if (!r.message) throw new Error('"message" option must not be null or an empty string.');
                (r = p.extend({}, m, r)).buttons || (r.buttons = {});
                return n = r.buttons, i = w(n), v(n, function(t, e, o) {
                    if (p.isFunction(e) && (e = n[t] = {
                            callback: e
                        }), "object" !== p.type(e)) throw new Error('button with key "' + t + '" must be an object');
                    if (e.label || (e.label = t), !e.className) {
                        var a = !1;
                        a = r.swapButtonOrder ? 0 === o : o === i - 1, e.className = i <= 2 && a ? "btn-primary" : "btn-secondary btn-default"
                    }
                }), r
            }(t), p.fn.modal.Constructor.VERSION) {
            t.fullBootstrapVersion = p.fn.modal.Constructor.VERSION;
            var e = t.fullBootstrapVersion.indexOf(".");
            t.bootstrap = t.fullBootstrapVersion.substring(0, e)
        } else t.bootstrap = "2", t.fullBootstrapVersion = "2.3.2", console.warn("Bootbox will *mostly* work with Bootstrap 2, but we do not officially support it. Please upgrade, if possible.");
        var o = p(f.dialog),
            a = o.find(".modal-dialog"),
            r = o.find(".modal-body"),
            n = p(f.header),
            i = p(f.footer),
            l = t.buttons,
            s = {
                onEscape: t.onEscape
            };
        if (r.find(".bootbox-body").html(t.message), 0 < w(t.buttons) && (v(l, function(t, e) {
                var o = p(f.button);
                switch (o.data("bb-handler", t), o.addClass(e.className), t) {
                    case "ok":
                    case "confirm":
                        o.addClass("bootbox-accept");
                        break;
                    case "cancel":
                        o.addClass("bootbox-cancel")
                }
                o.html(e.label), i.append(o), s[t] = e.callback
            }), r.after(i)), !0 === t.animate && o.addClass("fade"), t.className && o.addClass(t.className), t.size) switch (t.fullBootstrapVersion.substring(0, 3) < "3.1" && console.warn('"size" requires Bootstrap 3.1.0 or higher. You appear to be using ' + t.fullBootstrapVersion + ". Please upgrade to use this option."), t.size) {
            case "small":
            case "sm":
                a.addClass("modal-sm");
                break;
            case "large":
            case "lg":
                a.addClass("modal-lg");
                break;
            case "extra-large":
            case "xl":
                a.addClass("modal-xl"), t.fullBootstrapVersion.substring(0, 3) < "4.2" && console.warn('Using size "xl"/"extra-large" requires Bootstrap 4.2.0 or higher. You appear to be using ' + t.fullBootstrapVersion + ". Please upgrade to use this option.")
        }
        if (t.scrollable && (a.addClass("modal-dialog-scrollable"), t.fullBootstrapVersion.substring(0, 3) < "4.3" && console.warn('Using "scrollable" requires Bootstrap 4.3.0 or higher. You appear to be using ' + t.fullBootstrapVersion + ". Please upgrade to use this option.")), t.title && (r.before(n), o.find(".modal-title").html(t.title)), t.closeButton) {
            var c = p(f.closeButton);
            t.title ? 3 < t.bootstrap ? o.find(".modal-header").append(c) : o.find(".modal-header").prepend(c) : c.prependTo(r)
        }
        if (t.centerVertical && (a.addClass("modal-dialog-centered"), t.fullBootstrapVersion < "4.0.0" && console.warn('"centerVertical" requires Bootstrap 4.0.0-beta.3 or higher. You appear to be using ' + t.fullBootstrapVersion + ". Please upgrade to use this option.")), o.one("hide.bs.modal", {
                dialog: o
            }, x), t.onHide) {
            if (!p.isFunction(t.onHide)) throw new Error('Argument supplied to "onHide" must be a function');
            o.on("hide.bs.modal", t.onHide)
        }
        if (o.one("hidden.bs.modal", {
                dialog: o
            }, y), t.onHidden) {
            if (!p.isFunction(t.onHidden)) throw new Error('Argument supplied to "onHidden" must be a function');
            o.on("hidden.bs.modal", t.onHidden)
        }
        if (t.onShow) {
            if (!p.isFunction(t.onShow)) throw new Error('Argument supplied to "onShow" must be a function');
            o.on("show.bs.modal", t.onShow)
        }
        if (o.one("shown.bs.modal", {
                dialog: o
            }, g), t.onShown) {
            if (!p.isFunction(t.onShown)) throw new Error('Argument supplied to "onShown" must be a function');
            o.on("shown.bs.modal", t.onShown)
        }
        return "static" !== t.backdrop && o.on("click.dismiss.bs.modal", function(t) {
            o.children(".modal-backdrop").length && (t.currentTarget = o.children(".modal-backdrop").get(0)), t.target === t.currentTarget && o.trigger("escape.close.bb")
        }), o.on("escape.close.bb", function(t) {
            s.onEscape && k(t, o, s.onEscape)
        }), o.on("click", ".modal-footer button:not(.disabled)", function(t) {
            var e = p(this).data("bb-handler");
            e !== u && k(t, o, s[e])
        }), o.on("click", ".bootbox-close-button", function(t) {
            k(t, o, s.onEscape)
        }), o.on("keyup", function(t) {
            27 === t.which && o.trigger("escape.close.bb")
        }), p(t.container).append(o), o.modal({
            backdrop: !!t.backdrop && "static",
            keyboard: !1,
            show: !1
        }), t.show && o.modal("show"), o
    }, d.alert = function() {
        var t;
        if ((t = h("alert", ["ok"], ["message", "callback"], arguments)).callback && !p.isFunction(t.callback)) throw new Error('alert requires the "callback" property to be a function when provided');
        return t.buttons.ok.callback = t.onEscape = function() {
            return !p.isFunction(t.callback) || t.callback.call(this)
        }, d.dialog(t)
    }, d.confirm = function() {
        var t;
        if (t = h("confirm", ["cancel", "confirm"], ["message", "callback"], arguments), !p.isFunction(t.callback)) throw new Error("confirm requires a callback");
        return t.buttons.cancel.callback = t.onEscape = function() {
            return t.callback.call(this, !1)
        }, t.buttons.confirm.callback = function() {
            return t.callback.call(this, !0)
        }, d.dialog(t)
    }, d.prompt = function() {
        var r, e, t, n, o, a;
        if (t = p(f.form), (r = h("prompt", ["cancel", "confirm"], ["title", "callback"], arguments)).value || (r.value = m.value), r.inputType || (r.inputType = m.inputType), o = r.show === u ? m.show : r.show, r.show = !1, r.buttons.cancel.callback = r.onEscape = function() {
                return r.callback.call(this, null)
            }, r.buttons.confirm.callback = function() {
                var t;
                if ("checkbox" === r.inputType) t = n.find("input:checked").map(function() {
                    return p(this).val()
                }).get();
                else if ("radio" === r.inputType) t = n.find("input:checked").val();
                else {
                    if (n[0].checkValidity && !n[0].checkValidity()) return !1;
                    t = "select" === r.inputType && !0 === r.multiple ? n.find("option:selected").map(function() {
                        return p(this).val()
                    }).get() : n.val()
                }
                return r.callback.call(this, t)
            }, !r.title) throw new Error("prompt requires a title");
        if (!p.isFunction(r.callback)) throw new Error("prompt requires a callback");
        if (!f.inputs[r.inputType]) throw new Error("Invalid prompt type");
        switch (n = p(f.inputs[r.inputType]), r.inputType) {
            case "text":
            case "textarea":
            case "email":
            case "password":
                n.val(r.value), r.placeholder && n.attr("placeholder", r.placeholder), r.pattern && n.attr("pattern", r.pattern), r.maxlength && n.attr("maxlength", r.maxlength), r.required && n.prop({
                    required: !0
                }), r.rows && !isNaN(parseInt(r.rows)) && "textarea" === r.inputType && n.attr({
                    rows: r.rows
                });
                break;
            case "date":
            case "time":
            case "number":
            case "range":
                if (n.val(r.value), r.placeholder && n.attr("placeholder", r.placeholder), r.pattern && n.attr("pattern", r.pattern), r.required && n.prop({
                        required: !0
                    }), "date" !== r.inputType && r.step) {
                    if (!("any" === r.step || !isNaN(r.step) && 0 < parseFloat(r.step))) throw new Error('"step" must be a valid positive number or the value "any". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-step for more information.');
                    n.attr("step", r.step)
                }! function(t, e, o) {
                    var a = !1,
                        r = !0,
                        n = !0;
                    if ("date" === t) e === u || (r = O(e)) ? o === u || (n = O(o)) || console.warn('Browsers which natively support the "date" input type expect date values to be of the form "YYYY-MM-DD" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your max value may not be enforced by this browser.') : console.warn('Browsers which natively support the "date" input type expect date values to be of the form "YYYY-MM-DD" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your min value may not be enforced by this browser.');
                    else if ("time" === t) {
                        if (e !== u && !(r = E(e))) throw new Error('"min" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.');
                        if (o !== u && !(n = E(o))) throw new Error('"max" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.')
                    } else {
                        if (e !== u && isNaN(e)) throw r = !1, new Error('"min" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-min for more information.');
                        if (o !== u && isNaN(o)) throw n = !1, new Error('"max" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.')
                    }
                    if (r && n) {
                        if (o <= e) throw new Error('"max" must be greater than "min". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.');
                        a = !0
                    }
                    return a
                }(r.inputType, r.min, r.max) || (r.min !== u && n.attr("min", r.min), r.max !== u && n.attr("max", r.max));
                break;
            case "select":
                var i = {};
                if (a = r.inputOptions || [], !p.isArray(a)) throw new Error("Please pass an array of input options");
                if (!a.length) throw new Error('prompt with "inputType" set to "select" requires at least one option');
                r.placeholder && n.attr("placeholder", r.placeholder), r.required && n.prop({
                    required: !0
                }), r.multiple && n.prop({
                    multiple: !0
                }), v(a, function(t, e) {
                    var o = n;
                    if (e.value === u || e.text === u) throw new Error('each option needs a "value" property and a "text" property');
                    e.group && (i[e.group] || (i[e.group] = p("<optgroup />").attr("label", e.group)), o = i[e.group]);
                    var a = p(f.option);
                    a.attr("value", e.value).text(e.text), o.append(a)
                }), v(i, function(t, e) {
                    n.append(e)
                }), n.val(r.value);
                break;
            case "checkbox":
                var l = p.isArray(r.value) ? r.value : [r.value];
                if (!(a = r.inputOptions || []).length) throw new Error('prompt with "inputType" set to "checkbox" requires at least one option');
                n = p('<div class="bootbox-checkbox-list"></div>'), v(a, function(t, o) {
                    if (o.value === u || o.text === u) throw new Error('each option needs a "value" property and a "text" property');
                    var a = p(f.inputs[r.inputType]);
                    a.find("input").attr("value", o.value), a.find("label").append("\n" + o.text), v(l, function(t, e) {
                        e === o.value && a.find("input").prop("checked", !0)
                    }), n.append(a)
                });
                break;
            case "radio":
                if (r.value !== u && p.isArray(r.value)) throw new Error('prompt with "inputType" set to "radio" requires a single, non-array value for "value"');
                if (!(a = r.inputOptions || []).length) throw new Error('prompt with "inputType" set to "radio" requires at least one option');
                n = p('<div class="bootbox-radiobutton-list"></div>');
                var s = !0;
                v(a, function(t, e) {
                    if (e.value === u || e.text === u) throw new Error('each option needs a "value" property and a "text" property');
                    var o = p(f.inputs[r.inputType]);
                    o.find("input").attr("value", e.value), o.find("label").append("\n" + e.text), r.value !== u && e.value === r.value && (o.find("input").prop("checked", !0), s = !1), n.append(o)
                }), s && n.find('input[type="radio"]').first().prop("checked", !0)
        }
        if (t.append(n), t.on("submit", function(t) {
                t.preventDefault(), t.stopPropagation(), e.find(".bootbox-accept").trigger("click")
            }), "" !== p.trim(r.message)) {
            var c = p(f.promptMessage).html(r.message);
            t.prepend(c), r.message = t
        } else r.message = t;
        return (e = d.dialog(r)).off("shown.bs.modal", g), e.on("shown.bs.modal", function() {
            n.focus()
        }), !0 === o && e.modal("show"), e
    }, d
});