View file abfolio-html/assets/js/mixitup.js

File size: 149.24Kb
/**!
 * MixItUp v3.3.1
 * A high-performance, dependency-free library for animated filtering, sorting and more
 * Build 94e0fbf6-cd0b-4987-b3c0-14b59b67b8a0
 *
 * @copyright Copyright 2014-2018 KunkaLabs Limited.
 * @author    KunkaLabs Limited.
 * @link      https://www.kunkalabs.com/mixitup/
 *
 * @license   Commercial use requires a commercial license.
 *            https://www.kunkalabs.com/mixitup/licenses/
 *
 *            Non-commercial use permitted under same terms as CC BY-NC 3.0 license.
 *            http://creativecommons.org/licenses/by-nc/3.0/
 */
!(function (t) {
    "use strict";
    var e = null,
        n = null;
    !(function () {
        var e = ["webkit", "moz", "o", "ms"],
            n = t.document.createElement("div"),
            a = -1;
        for (a = 0; a < e.length && !t.requestAnimationFrame; a++) t.requestAnimationFrame = t[e[a] + "RequestAnimationFrame"];
        "undefined" == typeof n.nextElementSibling &&
            Object.defineProperty(t.Element.prototype, "nextElementSibling", {
                get: function () {
                    for (var t = this.nextSibling; t; ) {
                        if (1 === t.nodeType) return t;
                        t = t.nextSibling;
                    }
                    return null;
                },
            }),
            (function (t) {
                t.matches =
                    t.matches ||
                    t.machesSelector ||
                    t.mozMatchesSelector ||
                    t.msMatchesSelector ||
                    t.oMatchesSelector ||
                    t.webkitMatchesSelector ||
                    function (t) {
                        return Array.prototype.indexOf.call(this.parentElement.querySelectorAll(t), this) > -1;
                    };
            })(t.Element.prototype),
            Object.keys ||
                (Object.keys = (function () {
                    var t = Object.prototype.hasOwnProperty,
                        e = !1,
                        n = [],
                        a = -1;
                    return (
                        (e = !{ toString: null }.propertyIsEnumerable("toString")),
                        (n = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"]),
                        (a = n.length),
                        function (i) {
                            var o = [],
                                r = "",
                                s = -1;
                            if ("object" != typeof i && ("function" != typeof i || null === i)) throw new TypeError("Object.keys called on non-object");
                            for (r in i) t.call(i, r) && o.push(r);
                            if (e) for (s = 0; s < a; s++) t.call(i, n[s]) && o.push(n[s]);
                            return o;
                        }
                    );
                })()),
            Array.isArray ||
                (Array.isArray = function (t) {
                    return "[object Array]" === Object.prototype.toString.call(t);
                }),
            "function" != typeof Object.create &&
                (Object.create = (function (t) {
                    var e = function () {};
                    return function (n, a) {
                        if (n !== Object(n) && null !== n) throw TypeError("Argument must be an object, or null");
                        e.prototype = n || {};
                        var i = new e();
                        return (e.prototype = null), a !== t && Object.defineProperties(i, a), null === n && (i.__proto__ = null), i;
                    };
                })()),
            String.prototype.trim ||
                (String.prototype.trim = function () {
                    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
                }),
            Array.prototype.indexOf ||
                (Array.prototype.indexOf = function (t) {
                    var e, n, a, i;
                    if (null === this) throw new TypeError();
                    if (((a = Object(this)), (i = a.length >>> 0), 0 === i)) return -1;
                    if (((e = 0), arguments.length > 1 && ((e = Number(arguments[1])), e !== e ? (e = 0) : 0 !== e && e !== 1 / 0 && e !== -(1 / 0) && (e = (e > 0 || -1) * Math.floor(Math.abs(e)))), e >= i)) return -1;
                    for (n = e >= 0 ? e : Math.max(i - Math.abs(e), 0); n < i; n++) if (n in a && a[n] === t) return n;
                    return -1;
                }),
            Function.prototype.bind ||
                (Function.prototype.bind = function (t) {
                    var e, n, a, i;
                    if ("function" != typeof this) throw new TypeError();
                    return (
                        (e = Array.prototype.slice.call(arguments, 1)),
                        (n = this),
                        (a = function () {}),
                        (i = function () {
                            return n.apply(this instanceof a ? this : t, e.concat(Array.prototype.slice.call(arguments)));
                        }),
                        this.prototype && (a.prototype = this.prototype),
                        (i.prototype = new a()),
                        i
                    );
                }),
            t.Element.prototype.dispatchEvent ||
                (t.Element.prototype.dispatchEvent = function (t) {
                    try {
                        return this.fireEvent("on" + t.type, t);
                    } catch (e) {}
                });
    })(),
        (e = function (a, i, o) {
            var r = null,
                s = !1,
                l = null,
                c = null,
                u = null,
                f = null,
                h = [],
                d = "",
                m = [],
                g = -1;
            if (((u = o || t.document), (s = arguments[3]) && (s = "boolean" == typeof s), "string" == typeof a)) m = u.querySelectorAll(a);
            else if (a && "object" == typeof a && n.isElement(a, u)) m = [a];
            else {
                if (!a || "object" != typeof a || !a.length) throw new Error(e.messages.errorFactoryInvalidContainer());
                m = a;
            }
            if (m.length < 1) throw new Error(e.messages.errorFactoryContainerNotFound());
            for (g = 0; (r = m[g]) && (!(g > 0) || s); g++)
                r.id ? (d = r.id) : ((d = "MixItUp" + n.randomHex()), (r.id = d)),
                    e.instances[d] instanceof e.Mixer
                        ? ((l = e.instances[d]), (!i || (i && i.debug && i.debug.showWarnings !== !1)) && console.warn(e.messages.warningFactoryPreexistingInstance()))
                        : ((l = new e.Mixer()), l.attach(r, u, d, i), (e.instances[d] = l)),
                    (c = new e.Facade(l)),
                    i && i.debug && i.debug.enable ? h.push(l) : h.push(c);
            return (f = s ? new e.Collection(h) : h[0]);
        }),
        (e.use = function (t) {
            e.Base.prototype.callActions.call(e, "beforeUse", arguments),
                "function" == typeof t && "mixitup-extension" === t.TYPE ? "undefined" == typeof e.extensions[t.NAME] && (t(e), (e.extensions[t.NAME] = t)) : t.fn && t.fn.jquery && (e.libraries.$ = t),
                e.Base.prototype.callActions.call(e, "afterUse", arguments);
        }),
        (e.instances = {}),
        (e.extensions = {}),
        (e.libraries = {}),
        (n = {
            hasClass: function (t, e) {
                return !!t.className.match(new RegExp("(\\s|^)" + e + "(\\s|$)"));
            },
            addClass: function (t, e) {
                this.hasClass(t, e) || (t.className += t.className ? " " + e : e);
            },
            removeClass: function (t, e) {
                if (this.hasClass(t, e)) {
                    var n = new RegExp("(\\s|^)" + e + "(\\s|$)");
                    t.className = t.className.replace(n, " ").trim();
                }
            },
            extend: function (t, e, n, a) {
                var i = [],
                    o = "",
                    r = -1;
                (n = n || !1), (a = a || !1);
                try {
                    if (Array.isArray(e)) for (r = 0; r < e.length; r++) i.push(r);
                    else e && (i = Object.keys(e));
                    for (r = 0; r < i.length; r++)
                        (o = i[r]), !n || "object" != typeof e[o] || this.isElement(e[o]) ? (t[o] = e[o]) : Array.isArray(e[o]) ? (t[o] || (t[o] = []), this.extend(t[o], e[o], n, a)) : (t[o] || (t[o] = {}), this.extend(t[o], e[o], n, a));
                } catch (s) {
                    if (!a) throw s;
                    this.handleExtendError(s, t);
                }
                return t;
            },
            handleExtendError: function (t, n) {
                var a = /property "?(\w*)"?[,:] object/i,
                    i = null,
                    o = "",
                    r = "",
                    s = "",
                    l = "",
                    c = "",
                    u = -1,
                    f = -1;
                if (t instanceof TypeError && (i = a.exec(t.message))) {
                    o = i[1];
                    for (c in n) {
                        for (f = 0; f < o.length && o.charAt(f) === c.charAt(f); ) f++;
                        f > u && ((u = f), (l = c));
                    }
                    throw (u > 1 && (s = e.messages.errorConfigInvalidPropertySuggestion({ probableMatch: l })), (r = e.messages.errorConfigInvalidProperty({ erroneous: o, suggestion: s })), new TypeError(r));
                }
                throw t;
            },
            template: function (t) {
                for (var e = /\${([\w]*)}/g, n = {}, a = null; (a = e.exec(t)); ) n[a[1]] = new RegExp("\\${" + a[1] + "}", "g");
                return function (e) {
                    var a = "",
                        i = t;
                    e = e || {};
                    for (a in n) i = i.replace(n[a], "undefined" != typeof e[a] ? e[a] : "");
                    return i;
                };
            },
            on: function (e, n, a, i) {
                e &&
                    (e.addEventListener
                        ? e.addEventListener(n, a, i)
                        : e.attachEvent &&
                          ((e["e" + n + a] = a),
                          (e[n + a] = function () {
                              e["e" + n + a](t.event);
                          }),
                          e.attachEvent("on" + n, e[n + a])));
            },
            off: function (t, e, n) {
                t && (t.removeEventListener ? t.removeEventListener(e, n, !1) : t.detachEvent && (t.detachEvent("on" + e, t[e + n]), (t[e + n] = null)));
            },
            getCustomEvent: function (e, n, a) {
                var i = null;
                return (
                    (a = a || t.document),
                    "function" == typeof t.CustomEvent
                        ? (i = new t.CustomEvent(e, { detail: n, bubbles: !0, cancelable: !0 }))
                        : "function" == typeof a.createEvent
                        ? ((i = a.createEvent("CustomEvent")), i.initCustomEvent(e, !0, !0, n))
                        : ((i = a.createEventObject()), (i.type = e), (i.returnValue = !1), (i.cancelBubble = !1), (i.detail = n)),
                    i
                );
            },
            getOriginalEvent: function (t) {
                return t.touches && t.touches.length ? t.touches[0] : t.changedTouches && t.changedTouches.length ? t.changedTouches[0] : t;
            },
            index: function (t, e) {
                for (var n = 0; null !== (t = t.previousElementSibling); ) (e && !t.matches(e)) || ++n;
                return n;
            },
            camelCase: function (t) {
                return t.toLowerCase().replace(/([_-][a-z])/g, function (t) {
                    return t.toUpperCase().replace(/[_-]/, "");
                });
            },
            pascalCase: function (t) {
                return (t = this.camelCase(t)).charAt(0).toUpperCase() + t.slice(1);
            },
            dashCase: function (t) {
                return t
                    .replace(/([A-Z])/g, "-$1")
                    .replace(/^-/, "")
                    .toLowerCase();
            },
            isElement: function (e, n) {
                return (
                    (n = n || t.document),
                    !!(t.HTMLElement && e instanceof t.HTMLElement) || !!(n.defaultView && n.defaultView.HTMLElement && e instanceof n.defaultView.HTMLElement) || (null !== e && 1 === e.nodeType && "string" == typeof e.nodeName)
                );
            },
            createElement: function (e, n) {
                var a = null,
                    i = null;
                for (n = n || t.document, a = n.createDocumentFragment(), i = n.createElement("div"), i.innerHTML = e.trim(); i.firstChild; ) a.appendChild(i.firstChild);
                return a;
            },
            removeWhitespace: function (t) {
                for (var e; t && "#text" === t.nodeName; ) (e = t), (t = t.previousSibling), e.parentElement && e.parentElement.removeChild(e);
            },
            isEqualArray: function (t, e) {
                var n = t.length;
                if (n !== e.length) return !1;
                for (; n--; ) if (t[n] !== e[n]) return !1;
                return !0;
            },
            deepEquals: function (t, e) {
                var n;
                if ("object" == typeof t && t && "object" == typeof e && e) {
                    if (Object.keys(t).length !== Object.keys(e).length) return !1;
                    for (n in t) if (!e.hasOwnProperty(n) || !this.deepEquals(t[n], e[n])) return !1;
                } else if (t !== e) return !1;
                return !0;
            },
            arrayShuffle: function (t) {
                for (var e = t.slice(), n = e.length, a = n, i = -1, o = []; a--; ) (i = ~~(Math.random() * n)), (o = e[a]), (e[a] = e[i]), (e[i] = o);
                return e;
            },
            arrayFromList: function (t) {
                var e, n;
                try {
                    return Array.prototype.slice.call(t);
                } catch (a) {
                    for (e = [], n = 0; n < t.length; n++) e.push(t[n]);
                    return e;
                }
            },
            debounce: function (t, e, n) {
                var a;
                return function () {
                    var i = this,
                        o = arguments,
                        r = n && !a,
                        s = null;
                    (s = function () {
                        (a = null), n || t.apply(i, o);
                    }),
                        clearTimeout(a),
                        (a = setTimeout(s, e)),
                        r && t.apply(i, o);
                };
            },
            position: function (t) {
                for (var e = 0, n = 0, a = t; t; ) (e -= t.scrollLeft), (n -= t.scrollTop), t === a && ((e += t.offsetLeft), (n += t.offsetTop), (a = t.offsetParent)), (t = t.parentElement);
                return { x: e, y: n };
            },
            getHypotenuse: function (t, e) {
                var n = t.x - e.x,
                    a = t.y - e.y;
                return (n = n < 0 ? n * -1 : n), (a = a < 0 ? a * -1 : a), Math.sqrt(Math.pow(n, 2) + Math.pow(a, 2));
            },
            getIntersectionRatio: function (t, e) {
                var n = t.width * t.height,
                    a = -1,
                    i = -1,
                    o = -1,
                    r = -1;
                return (a = Math.max(0, Math.min(t.left + t.width, e.left + e.width) - Math.max(t.left, e.left))), (i = Math.max(0, Math.min(t.top + t.height, e.top + e.height) - Math.max(t.top, e.top))), (o = i * a), (r = o / n);
            },
            closestParent: function (e, n, a, i) {
                var o = e.parentNode;
                if (((i = i || t.document), a && e.matches(n))) return e;
                for (; o && o != i.body; ) {
                    if (o.matches && o.matches(n)) return o;
                    if (!o.parentNode) return null;
                    o = o.parentNode;
                }
                return null;
            },
            children: function (e, n, a) {
                var i = [],
                    o = "";
                return (a = a || t.doc), e && (e.id || ((o = "Temp" + this.randomHexKey()), (e.id = o)), (i = a.querySelectorAll("#" + e.id + " > " + n)), o && e.removeAttribute("id")), i;
            },
            clean: function (t) {
                var e = [],
                    n = -1;
                for (n = 0; n < t.length; n++) "" !== t[n] && e.push(t[n]);
                return e;
            },
            defer: function (n) {
                var a = null,
                    i = null,
                    o = null;
                return (
                    (i = new this.Deferred()),
                    e.features.has.promises
                        ? (i.promise = new Promise(function (t, e) {
                              (i.resolve = t), (i.reject = e);
                          }))
                        : (o = t.jQuery || n.$) && "function" == typeof o.Deferred
                        ? ((a = o.Deferred()), (i.promise = a.promise()), (i.resolve = a.resolve), (i.reject = a.reject))
                        : t.console && console.warn(e.messages.warningNoPromiseImplementation()),
                    i
                );
            },
            all: function (n, a) {
                var i = null;
                return e.features.has.promises
                    ? Promise.all(n)
                    : (i = t.jQuery || a.$) && "function" == typeof i.when
                    ? i.when.apply(i, n).done(function () {
                          return arguments;
                      })
                    : (t.console && console.warn(e.messages.warningNoPromiseImplementation()), []);
            },
            getPrefix: function (t, e, a) {
                var i = -1,
                    o = "";
                if (n.dashCase(e) in t.style) return "";
                for (i = 0; (o = a[i]); i++) if (o + e in t.style) return o.toLowerCase();
                return "unsupported";
            },
            randomHex: function () {
                return ("00000" + ((16777216 * Math.random()) << 0).toString(16)).substr(-6).toUpperCase();
            },
            getDocumentState: function (e) {
                return (
                    (e = "object" == typeof e.body ? e : t.document),
                    {
                        scrollTop: t.pageYOffset,
                        scrollLeft: t.pageXOffset,
                        docHeight: e.documentElement.scrollHeight,
                        docWidth: e.documentElement.scrollWidth,
                        viewportHeight: e.documentElement.clientHeight,
                        viewportWidth: e.documentElement.clientWidth,
                    }
                );
            },
            bind: function (t, e) {
                return function () {
                    return e.apply(t, arguments);
                };
            },
            isVisible: function (e) {
                var n = null;
                return !!e.offsetParent || ((n = t.getComputedStyle(e)), "fixed" === n.position && "hidden" !== n.visibility && "0" !== n.opacity);
            },
            seal: function (t) {
                "function" == typeof Object.seal && Object.seal(t);
            },
            freeze: function (t) {
                "function" == typeof Object.freeze && Object.freeze(t);
            },
            compareVersions: function (t, e) {
                var n = t.split("."),
                    a = e.split("."),
                    i = -1,
                    o = -1,
                    r = -1;
                for (r = 0; r < n.length; r++) {
                    if (((i = parseInt(n[r].replace(/[^\d.]/g, ""))), (o = parseInt(a[r].replace(/[^\d.]/g, "") || 0)), o < i)) return !1;
                    if (o > i) return !0;
                }
                return !0;
            },
            Deferred: function () {
                (this.promise = null), (this.resolve = null), (this.reject = null), (this.id = n.randomHex());
            },
            isEmptyObject: function (t) {
                var e = "";
                if ("function" == typeof Object.keys) return 0 === Object.keys(t).length;
                for (e in t) if (t.hasOwnProperty(e)) return !1;
                return !0;
            },
            getClassname: function (t, e, n) {
                var a = "";
                return (a += t.block), a.length && (a += t.delineatorElement), (a += t["element" + this.pascalCase(e)]), n ? (a.length && (a += t.delineatorModifier), (a += n)) : a;
            },
            getProperty: function (t, e) {
                var n = e.split("."),
                    a = null,
                    i = "",
                    o = 0;
                if (!e) return t;
                for (
                    a = function (t) {
                        return t ? t[i] : null;
                    };
                    o < n.length;

                )
                    (i = n[o]), (t = a(t)), o++;
                return "undefined" != typeof t ? t : null;
            },
        }),
        (e.h = n),
        (e.Base = function () {}),
        (e.Base.prototype = {
            constructor: e.Base,
            callActions: function (t, e) {
                var a = this,
                    i = a.constructor.actions[t],
                    o = "";
                if (i && !n.isEmptyObject(i)) for (o in i) i[o].apply(a, e);
            },
            callFilters: function (t, e, a) {
                var i = this,
                    o = i.constructor.filters[t],
                    r = e,
                    s = "";
                if (!o || n.isEmptyObject(o)) return r;
                a = a || [];
                for (s in o) (a = n.arrayFromList(a)), a.unshift(r), (r = o[s].apply(i, a));
                return r;
            },
        }),
        (e.BaseStatic = function () {
            (this.actions = {}),
                (this.filters = {}),
                (this.extend = function (t) {
                    n.extend(this.prototype, t);
                }),
                (this.registerAction = function (t, e, n) {
                    (this.actions[t] = this.actions[t] || {})[e] = n;
                }),
                (this.registerFilter = function (t, e, n) {
                    (this.filters[t] = this.filters[t] || {})[e] = n;
                });
        }),
        (e.Features = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.boxSizingPrefix = ""),
                (this.transformPrefix = ""),
                (this.transitionPrefix = ""),
                (this.boxSizingPrefix = ""),
                (this.transformProp = ""),
                (this.transformRule = ""),
                (this.transitionProp = ""),
                (this.perspectiveProp = ""),
                (this.perspectiveOriginProp = ""),
                (this.has = new e.Has()),
                (this.canary = null),
                (this.BOX_SIZING_PROP = "boxSizing"),
                (this.TRANSITION_PROP = "transition"),
                (this.TRANSFORM_PROP = "transform"),
                (this.PERSPECTIVE_PROP = "perspective"),
                (this.PERSPECTIVE_ORIGIN_PROP = "perspectiveOrigin"),
                (this.VENDORS = ["Webkit", "moz", "O", "ms"]),
                (this.TWEENABLE = ["opacity", "width", "height", "marginRight", "marginBottom", "x", "y", "scale", "translateX", "translateY", "translateZ", "rotateX", "rotateY", "rotateZ"]),
                this.callActions("afterConstruct");
        }),
        e.BaseStatic.call(e.Features),
        (e.Features.prototype = Object.create(e.Base.prototype)),
        n.extend(e.Features.prototype, {
            constructor: e.Features,
            init: function () {
                var t = this;
                t.callActions("beforeInit", arguments), (t.canary = document.createElement("div")), t.setPrefixes(), t.runTests(), t.callActions("beforeInit", arguments);
            },
            runTests: function () {
                var e = this;
                e.callActions("beforeRunTests", arguments), (e.has.promises = "function" == typeof t.Promise), (e.has.transitions = "unsupported" !== e.transitionPrefix), e.callActions("afterRunTests", arguments), n.freeze(e.has);
            },
            setPrefixes: function () {
                var t = this;
                t.callActions("beforeSetPrefixes", arguments),
                    (t.transitionPrefix = n.getPrefix(t.canary, "Transition", t.VENDORS)),
                    (t.transformPrefix = n.getPrefix(t.canary, "Transform", t.VENDORS)),
                    (t.boxSizingPrefix = n.getPrefix(t.canary, "BoxSizing", t.VENDORS)),
                    (t.boxSizingProp = t.boxSizingPrefix ? t.boxSizingPrefix + n.pascalCase(t.BOX_SIZING_PROP) : t.BOX_SIZING_PROP),
                    (t.transitionProp = t.transitionPrefix ? t.transitionPrefix + n.pascalCase(t.TRANSITION_PROP) : t.TRANSITION_PROP),
                    (t.transformProp = t.transformPrefix ? t.transformPrefix + n.pascalCase(t.TRANSFORM_PROP) : t.TRANSFORM_PROP),
                    (t.transformRule = t.transformPrefix ? "-" + t.transformPrefix + "-" + t.TRANSFORM_PROP : t.TRANSFORM_PROP),
                    (t.perspectiveProp = t.transformPrefix ? t.transformPrefix + n.pascalCase(t.PERSPECTIVE_PROP) : t.PERSPECTIVE_PROP),
                    (t.perspectiveOriginProp = t.transformPrefix ? t.transformPrefix + n.pascalCase(t.PERSPECTIVE_ORIGIN_PROP) : t.PERSPECTIVE_ORIGIN_PROP),
                    t.callActions("afterSetPrefixes", arguments);
            },
        }),
        (e.Has = function () {
            (this.transitions = !1), (this.promises = !1), n.seal(this);
        }),
        (e.features = new e.Features()),
        e.features.init(),
        (e.ConfigAnimation = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.enable = !0),
                (this.effects = "fade scale"),
                (this.effectsIn = ""),
                (this.effectsOut = ""),
                (this.duration = 600),
                (this.easing = "ease"),
                (this.applyPerspective = !0),
                (this.perspectiveDistance = "3000px"),
                (this.perspectiveOrigin = "50% 50%"),
                (this.queue = !0),
                (this.queueLimit = 3),
                (this.animateResizeContainer = !0),
                (this.animateResizeTargets = !1),
                (this.staggerSequence = null),
                (this.reverseOut = !1),
                (this.nudge = !0),
                (this.clampHeight = !0),
                (this.clampWidth = !0),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigAnimation),
        (e.ConfigAnimation.prototype = Object.create(e.Base.prototype)),
        (e.ConfigAnimation.prototype.constructor = e.ConfigAnimation),
        (e.ConfigBehavior = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.liveSort = !1), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigBehavior),
        (e.ConfigBehavior.prototype = Object.create(e.Base.prototype)),
        (e.ConfigBehavior.prototype.constructor = e.ConfigBehavior),
        (e.ConfigCallbacks = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.onMixStart = null),
                (this.onMixBusy = null),
                (this.onMixEnd = null),
                (this.onMixFail = null),
                (this.onMixClick = null),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigCallbacks),
        (e.ConfigCallbacks.prototype = Object.create(e.Base.prototype)),
        (e.ConfigCallbacks.prototype.constructor = e.ConfigCallbacks),
        (e.ConfigControls = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.enable = !0), (this.live = !1), (this.scope = "global"), (this.toggleLogic = "or"), (this.toggleDefault = "all"), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigControls),
        (e.ConfigControls.prototype = Object.create(e.Base.prototype)),
        (e.ConfigControls.prototype.constructor = e.ConfigControls),
        (e.ConfigClassNames = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.block = "mixitup"),
                (this.elementContainer = "container"),
                (this.elementFilter = "control"),
                (this.elementSort = "control"),
                (this.elementMultimix = "control"),
                (this.elementToggle = "control"),
                (this.modifierActive = "active"),
                (this.modifierDisabled = "disabled"),
                (this.modifierFailed = "failed"),
                (this.delineatorElement = "-"),
                (this.delineatorModifier = "-"),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigClassNames),
        (e.ConfigClassNames.prototype = Object.create(e.Base.prototype)),
        (e.ConfigClassNames.prototype.constructor = e.ConfigClassNames),
        (e.ConfigData = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.uidKey = ""), (this.dirtyCheck = !1), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigData),
        (e.ConfigData.prototype = Object.create(e.Base.prototype)),
        (e.ConfigData.prototype.constructor = e.ConfigData),
        (e.ConfigDebug = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.enable = !1), (this.showWarnings = !0), (this.fauxAsync = !1), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigDebug),
        (e.ConfigDebug.prototype = Object.create(e.Base.prototype)),
        (e.ConfigDebug.prototype.constructor = e.ConfigDebug),
        (e.ConfigLayout = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.allowNestedTargets = !0), (this.containerClassName = ""), (this.siblingBefore = null), (this.siblingAfter = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigLayout),
        (e.ConfigLayout.prototype = Object.create(e.Base.prototype)),
        (e.ConfigLayout.prototype.constructor = e.ConfigLayout),
        (e.ConfigLoad = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.filter = "all"), (this.sort = "default:asc"), (this.dataset = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigLoad),
        (e.ConfigLoad.prototype = Object.create(e.Base.prototype)),
        (e.ConfigLoad.prototype.constructor = e.ConfigLoad),
        (e.ConfigSelectors = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.target = ".mix"), (this.control = ""), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigSelectors),
        (e.ConfigSelectors.prototype = Object.create(e.Base.prototype)),
        (e.ConfigSelectors.prototype.constructor = e.ConfigSelectors),
        (e.ConfigRender = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.target = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigRender),
        (e.ConfigRender.prototype = Object.create(e.Base.prototype)),
        (e.ConfigRender.prototype.constructor = e.ConfigRender),
        (e.ConfigTemplates = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.ConfigTemplates),
        (e.ConfigTemplates.prototype = Object.create(e.Base.prototype)),
        (e.ConfigTemplates.prototype.constructor = e.ConfigTemplates),
        (e.Config = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.animation = new e.ConfigAnimation()),
                (this.behavior = new e.ConfigBehavior()),
                (this.callbacks = new e.ConfigCallbacks()),
                (this.controls = new e.ConfigControls()),
                (this.classNames = new e.ConfigClassNames()),
                (this.data = new e.ConfigData()),
                (this.debug = new e.ConfigDebug()),
                (this.layout = new e.ConfigLayout()),
                (this.load = new e.ConfigLoad()),
                (this.selectors = new e.ConfigSelectors()),
                (this.render = new e.ConfigRender()),
                (this.templates = new e.ConfigTemplates()),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.Config),
        (e.Config.prototype = Object.create(e.Base.prototype)),
        (e.Config.prototype.constructor = e.Config),
        (e.MixerDom = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.document = null), (this.body = null), (this.container = null), (this.parent = null), (this.targets = []), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.MixerDom),
        (e.MixerDom.prototype = Object.create(e.Base.prototype)),
        (e.MixerDom.prototype.constructor = e.MixerDom),
        (e.UiClassNames = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.base = ""), (this.active = ""), (this.disabled = ""), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.UiClassNames),
        (e.UiClassNames.prototype = Object.create(e.Base.prototype)),
        (e.UiClassNames.prototype.constructor = e.UiClassNames),
        (e.CommandDataset = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.dataset = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.CommandDataset),
        (e.CommandDataset.prototype = Object.create(e.Base.prototype)),
        (e.CommandDataset.prototype.constructor = e.CommandDataset),
        (e.CommandMultimix = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.filter = null), (this.sort = null), (this.insert = null), (this.remove = null), (this.changeLayout = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.CommandMultimix),
        (e.CommandMultimix.prototype = Object.create(e.Base.prototype)),
        (e.CommandMultimix.prototype.constructor = e.CommandMultimix),
        (e.CommandFilter = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.selector = ""), (this.collection = null), (this.action = "show"), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.CommandFilter),
        (e.CommandFilter.prototype = Object.create(e.Base.prototype)),
        (e.CommandFilter.prototype.constructor = e.CommandFilter),
        (e.CommandSort = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.sortString = ""), (this.attribute = ""), (this.order = "asc"), (this.collection = null), (this.next = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.CommandSort),
        (e.CommandSort.prototype = Object.create(e.Base.prototype)),
        (e.CommandSort.prototype.constructor = e.CommandSort),
        (e.CommandInsert = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.index = 0), (this.collection = []), (this.position = "before"), (this.sibling = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.CommandInsert),
        (e.CommandInsert.prototype = Object.create(e.Base.prototype)),
        (e.CommandInsert.prototype.constructor = e.CommandInsert),
        (e.CommandRemove = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.targets = []), (this.collection = []), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.CommandRemove),
        (e.CommandRemove.prototype = Object.create(e.Base.prototype)),
        (e.CommandRemove.prototype.constructor = e.CommandRemove),
        (e.CommandChangeLayout = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.containerClassName = ""), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.CommandChangeLayout),
        (e.CommandChangeLayout.prototype = Object.create(e.Base.prototype)),
        (e.CommandChangeLayout.prototype.constructor = e.CommandChangeLayout),
        (e.ControlDefinition = function (t, a, i, o) {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.type = t), (this.selector = a), (this.live = i || !1), (this.parent = o || ""), this.callActions("afterConstruct"), n.freeze(this), n.seal(this);
        }),
        e.BaseStatic.call(e.ControlDefinition),
        (e.ControlDefinition.prototype = Object.create(e.Base.prototype)),
        (e.ControlDefinition.prototype.constructor = e.ControlDefinition),
        (e.controlDefinitions = []),
        e.controlDefinitions.push(new e.ControlDefinition("multimix", "[data-filter][data-sort]")),
        e.controlDefinitions.push(new e.ControlDefinition("filter", "[data-filter]")),
        e.controlDefinitions.push(new e.ControlDefinition("sort", "[data-sort]")),
        e.controlDefinitions.push(new e.ControlDefinition("toggle", "[data-toggle]")),
        (e.Control = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.el = null),
                (this.selector = ""),
                (this.bound = []),
                (this.pending = -1),
                (this.type = ""),
                (this.status = "inactive"),
                (this.filter = ""),
                (this.sort = ""),
                (this.canDisable = !1),
                (this.handler = null),
                (this.classNames = new e.UiClassNames()),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.Control),
        (e.Control.prototype = Object.create(e.Base.prototype)),
        n.extend(e.Control.prototype, {
            constructor: e.Control,
            init: function (t, n, a) {
                var i = this;
                if ((this.callActions("beforeInit", arguments), (i.el = t), (i.type = n), (i.selector = a), i.selector)) i.status = "live";
                else
                    switch (((i.canDisable = "boolean" == typeof i.el.disable), i.type)) {
                        case "filter":
                            i.filter = i.el.getAttribute("data-filter");
                            break;
                        case "toggle":
                            i.filter = i.el.getAttribute("data-toggle");
                            break;
                        case "sort":
                            i.sort = i.el.getAttribute("data-sort");
                            break;
                        case "multimix":
                            (i.filter = i.el.getAttribute("data-filter")), (i.sort = i.el.getAttribute("data-sort"));
                    }
                i.bindClick(), e.controls.push(i), this.callActions("afterInit", arguments);
            },
            isBound: function (t) {
                var e = this,
                    n = !1;
                return this.callActions("beforeIsBound", arguments), (n = e.bound.indexOf(t) > -1), e.callFilters("afterIsBound", n, arguments);
            },
            addBinding: function (t) {
                var e = this;
                this.callActions("beforeAddBinding", arguments), e.isBound() || e.bound.push(t), this.callActions("afterAddBinding", arguments);
            },
            removeBinding: function (t) {
                var n = this,
                    a = -1;
                this.callActions("beforeRemoveBinding", arguments),
                    (a = n.bound.indexOf(t)) > -1 && n.bound.splice(a, 1),
                    n.bound.length < 1 && (n.unbindClick(), (a = e.controls.indexOf(n)), e.controls.splice(a, 1), "active" === n.status && n.renderStatus(n.el, "inactive")),
                    this.callActions("afterRemoveBinding", arguments);
            },
            bindClick: function () {
                var t = this;
                this.callActions("beforeBindClick", arguments),
                    (t.handler = function (e) {
                        t.handleClick(e);
                    }),
                    n.on(t.el, "click", t.handler),
                    this.callActions("afterBindClick", arguments);
            },
            unbindClick: function () {
                var t = this;
                this.callActions("beforeUnbindClick", arguments), n.off(t.el, "click", t.handler), (t.handler = null), this.callActions("afterUnbindClick", arguments);
            },
            handleClick: function (t) {
                var a = this,
                    i = null,
                    o = null,
                    r = !1,
                    s = void 0,
                    l = {},
                    c = null,
                    u = [],
                    f = -1;
                if ((this.callActions("beforeHandleClick", arguments), (this.pending = 0), (o = a.bound[0]), (i = a.selector ? n.closestParent(t.target, o.config.selectors.control + a.selector, !0, o.dom.document) : a.el), !i))
                    return void a.callActions("afterHandleClick", arguments);
                switch (a.type) {
                    case "filter":
                        l.filter = a.filter || i.getAttribute("data-filter");
                        break;
                    case "sort":
                        l.sort = a.sort || i.getAttribute("data-sort");
                        break;
                    case "multimix":
                        (l.filter = a.filter || i.getAttribute("data-filter")), (l.sort = a.sort || i.getAttribute("data-sort"));
                        break;
                    case "toggle":
                        (l.filter = a.filter || i.getAttribute("data-toggle")), (r = "live" === a.status ? n.hasClass(i, a.classNames.active) : "active" === a.status);
                }
                for (f = 0; f < a.bound.length; f++) (c = new e.CommandMultimix()), n.extend(c, l), u.push(c);
                for (u = a.callFilters("commandsHandleClick", u, arguments), a.pending = a.bound.length, f = 0; (o = a.bound[f]); f++)
                    (l = u[f]),
                        l &&
                            (o.lastClicked || (o.lastClicked = i),
                            e.events.fire("mixClick", o.dom.container, { state: o.state, instance: o, originalEvent: t, control: o.lastClicked }, o.dom.document),
                            ("function" == typeof o.config.callbacks.onMixClick && ((s = o.config.callbacks.onMixClick.call(o.lastClicked, o.state, t, o)), s === !1)) ||
                                ("toggle" === a.type ? (r ? o.toggleOff(l.filter) : o.toggleOn(l.filter)) : o.multimix(l)));
                this.callActions("afterHandleClick", arguments);
            },
            update: function (t, n) {
                var a = this,
                    i = new e.CommandMultimix();
                a.callActions("beforeUpdate", arguments),
                    a.pending--,
                    (a.pending = Math.max(0, a.pending)),
                    a.pending > 0 ||
                        ("live" === a.status ? a.updateLive(t, n) : ((i.sort = a.sort), (i.filter = a.filter), a.callFilters("actionsUpdate", i, arguments), a.parseStatusChange(a.el, t, i, n)), a.callActions("afterUpdate", arguments));
            },
            updateLive: function (t, n) {
                var a = this,
                    i = null,
                    o = null,
                    r = null,
                    s = -1;
                if ((a.callActions("beforeUpdateLive", arguments), a.el)) {
                    for (i = a.el.querySelectorAll(a.selector), s = 0; (r = i[s]); s++) {
                        switch (((o = new e.CommandMultimix()), a.type)) {
                            case "filter":
                                o.filter = r.getAttribute("data-filter");
                                break;
                            case "sort":
                                o.sort = r.getAttribute("data-sort");
                                break;
                            case "multimix":
                                (o.filter = r.getAttribute("data-filter")), (o.sort = r.getAttribute("data-sort"));
                                break;
                            case "toggle":
                                o.filter = r.getAttribute("data-toggle");
                        }
                        (o = a.callFilters("actionsUpdateLive", o, arguments)), a.parseStatusChange(r, t, o, n);
                    }
                    a.callActions("afterUpdateLive", arguments);
                }
            },
            parseStatusChange: function (t, e, n, a) {
                var i = this,
                    o = "",
                    r = "",
                    s = -1;
                switch ((i.callActions("beforeParseStatusChange", arguments), i.type)) {
                    case "filter":
                        e.filter === n.filter ? i.renderStatus(t, "active") : i.renderStatus(t, "inactive");
                        break;
                    case "multimix":
                        e.sort === n.sort && e.filter === n.filter ? i.renderStatus(t, "active") : i.renderStatus(t, "inactive");
                        break;
                    case "sort":
                        e.sort.match(/:asc/g) && (o = e.sort.replace(/:asc/g, "")), e.sort === n.sort || o === n.sort ? i.renderStatus(t, "active") : i.renderStatus(t, "inactive");
                        break;
                    case "toggle":
                        for (a.length < 1 && i.renderStatus(t, "inactive"), e.filter === n.filter && i.renderStatus(t, "active"), s = 0; s < a.length; s++) {
                            if (((r = a[s]), r === n.filter)) {
                                i.renderStatus(t, "active");
                                break;
                            }
                            i.renderStatus(t, "inactive");
                        }
                }
                i.callActions("afterParseStatusChange", arguments);
            },
            renderStatus: function (t, e) {
                var a = this;
                switch ((a.callActions("beforeRenderStatus", arguments), e)) {
                    case "active":
                        n.addClass(t, a.classNames.active), n.removeClass(t, a.classNames.disabled), a.canDisable && (a.el.disabled = !1);
                        break;
                    case "inactive":
                        n.removeClass(t, a.classNames.active), n.removeClass(t, a.classNames.disabled), a.canDisable && (a.el.disabled = !1);
                        break;
                    case "disabled":
                        a.canDisable && (a.el.disabled = !0), n.addClass(t, a.classNames.disabled), n.removeClass(t, a.classNames.active);
                }
                "live" !== a.status && (a.status = e), a.callActions("afterRenderStatus", arguments);
            },
        }),
        (e.controls = []),
        (e.StyleData = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.x = 0),
                (this.y = 0),
                (this.top = 0),
                (this.right = 0),
                (this.bottom = 0),
                (this.left = 0),
                (this.width = 0),
                (this.height = 0),
                (this.marginRight = 0),
                (this.marginBottom = 0),
                (this.opacity = 0),
                (this.scale = new e.TransformData()),
                (this.translateX = new e.TransformData()),
                (this.translateY = new e.TransformData()),
                (this.translateZ = new e.TransformData()),
                (this.rotateX = new e.TransformData()),
                (this.rotateY = new e.TransformData()),
                (this.rotateZ = new e.TransformData()),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.StyleData),
        (e.StyleData.prototype = Object.create(e.Base.prototype)),
        (e.StyleData.prototype.constructor = e.StyleData),
        (e.TransformData = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.value = 0), (this.unit = ""), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.TransformData),
        (e.TransformData.prototype = Object.create(e.Base.prototype)),
        (e.TransformData.prototype.constructor = e.TransformData),
        (e.TransformDefaults = function () {
            e.StyleData.apply(this),
                this.callActions("beforeConstruct"),
                (this.scale.value = 0.01),
                (this.scale.unit = ""),
                (this.translateX.value = 20),
                (this.translateX.unit = "px"),
                (this.translateY.value = 20),
                (this.translateY.unit = "px"),
                (this.translateZ.value = 20),
                (this.translateZ.unit = "px"),
                (this.rotateX.value = 90),
                (this.rotateX.unit = "deg"),
                (this.rotateY.value = 90),
                (this.rotateY.unit = "deg"),
                (this.rotateX.value = 90),
                (this.rotateX.unit = "deg"),
                (this.rotateZ.value = 180),
                (this.rotateZ.unit = "deg"),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.TransformDefaults),
        (e.TransformDefaults.prototype = Object.create(e.StyleData.prototype)),
        (e.TransformDefaults.prototype.constructor = e.TransformDefaults),
        (e.transformDefaults = new e.TransformDefaults()),
        (e.EventDetail = function () {
            (this.state = null), (this.futureState = null), (this.instance = null), (this.originalEvent = null);
        }),
        (e.Events = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.mixStart = null), (this.mixBusy = null), (this.mixEnd = null), (this.mixFail = null), (this.mixClick = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.Events),
        (e.Events.prototype = Object.create(e.Base.prototype)),
        (e.Events.prototype.constructor = e.Events),
        (e.Events.prototype.fire = function (t, a, i, o) {
            var r = this,
                s = null,
                l = new e.EventDetail();
            if ((r.callActions("beforeFire", arguments), "undefined" == typeof r[t])) throw new Error('Event type "' + t + '" not found.');
            (l.state = new e.State()),
                n.extend(l.state, i.state),
                i.futureState && ((l.futureState = new e.State()), n.extend(l.futureState, i.futureState)),
                (l.instance = i.instance),
                i.originalEvent && (l.originalEvent = i.originalEvent),
                (s = n.getCustomEvent(t, l, o)),
                r.callFilters("eventFire", s, arguments),
                a.dispatchEvent(s);
        }),
        (e.events = new e.Events()),
        (e.QueueItem = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.args = []), (this.instruction = null), (this.triggerElement = null), (this.deferred = null), (this.isToggling = !1), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.QueueItem),
        (e.QueueItem.prototype = Object.create(e.Base.prototype)),
        (e.QueueItem.prototype.constructor = e.QueueItem),
        (e.Mixer = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.config = new e.Config()),
                (this.id = ""),
                (this.isBusy = !1),
                (this.isToggling = !1),
                (this.incPadding = !0),
                (this.controls = []),
                (this.targets = []),
                (this.origOrder = []),
                (this.cache = {}),
                (this.toggleArray = []),
                (this.targetsMoved = 0),
                (this.targetsImmovable = 0),
                (this.targetsBound = 0),
                (this.targetsDone = 0),
                (this.staggerDuration = 0),
                (this.effectsIn = null),
                (this.effectsOut = null),
                (this.transformIn = []),
                (this.transformOut = []),
                (this.queue = []),
                (this.state = null),
                (this.lastOperation = null),
                (this.lastClicked = null),
                (this.userCallback = null),
                (this.userDeferred = null),
                (this.dom = new e.MixerDom()),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.Mixer),
        (e.Mixer.prototype = Object.create(e.Base.prototype)),
        n.extend(e.Mixer.prototype, {
            constructor: e.Mixer,
            attach: function (a, i, o, r) {
                var s = this,
                    l = null,
                    c = -1;
                for (
                    s.callActions("beforeAttach", arguments),
                        s.id = o,
                        r && n.extend(s.config, r, !0, !0),
                        s.sanitizeConfig(),
                        s.cacheDom(a, i),
                        s.config.layout.containerClassName && n.addClass(s.dom.container, s.config.layout.containerClassName),
                        e.features.has.transitions || (s.config.animation.enable = !1),
                        "undefined" == typeof t.console && (s.config.debug.showWarnings = !1),
                        s.config.data.uidKey && (s.config.controls.enable = !1),
                        s.indexTargets(),
                        s.state = s.getInitialState(),
                        c = 0;
                    (l = s.lastOperation.toHide[c]);
                    c++
                )
                    l.hide();
                s.config.controls.enable && (s.initControls(), s.buildToggleArray(null, s.state), s.updateControls({ filter: s.state.activeFilter, sort: s.state.activeSort })), s.parseEffects(), s.callActions("afterAttach", arguments);
            },
            sanitizeConfig: function () {
                var t = this;
                t.callActions("beforeSanitizeConfig", arguments),
                    (t.config.controls.scope = t.config.controls.scope.toLowerCase().trim()),
                    (t.config.controls.toggleLogic = t.config.controls.toggleLogic.toLowerCase().trim()),
                    (t.config.controls.toggleDefault = t.config.controls.toggleDefault.toLowerCase().trim()),
                    (t.config.animation.effects = t.config.animation.effects.trim()),
                    t.callActions("afterSanitizeConfig", arguments);
            },
            getInitialState: function () {
                var t = this,
                    n = new e.State(),
                    a = new e.Operation();
                if ((t.callActions("beforeGetInitialState", arguments), (n.activeContainerClassName = t.config.layout.containerClassName), t.config.load.dataset)) {
                    if (!t.config.data.uidKey || "string" != typeof t.config.data.uidKey) throw new TypeError(e.messages.errorConfigDataUidKeyNotSet());
                    (a.startDataset = a.newDataset = n.activeDataset = t.config.load.dataset.slice()),
                        (a.startContainerClassName = a.newContainerClassName = n.activeContainerClassName),
                        (a.show = t.targets.slice()),
                        (n = t.callFilters("stateGetInitialState", n, arguments));
                } else
                    (n.activeFilter = t.parseFilterArgs([t.config.load.filter]).command),
                        (n.activeSort = t.parseSortArgs([t.config.load.sort]).command),
                        (n.totalTargets = t.targets.length),
                        (n = t.callFilters("stateGetInitialState", n, arguments)),
                        n.activeSort.collection || n.activeSort.attribute || "random" === n.activeSort.order || "desc" === n.activeSort.order
                            ? ((a.newSort = n.activeSort), t.sortOperation(a), t.printSort(!1, a), (t.targets = a.newOrder))
                            : (a.startOrder = a.newOrder = t.targets),
                        (a.startFilter = a.newFilter = n.activeFilter),
                        (a.startSort = a.newSort = n.activeSort),
                        (a.startContainerClassName = a.newContainerClassName = n.activeContainerClassName),
                        "all" === a.newFilter.selector ? (a.newFilter.selector = t.config.selectors.target) : "none" === a.newFilter.selector && (a.newFilter.selector = "");
                return (a = t.callFilters("operationGetInitialState", a, [n])), (t.lastOperation = a), a.newFilter && t.filterOperation(a), (n = t.buildState(a));
            },
            cacheDom: function (t, e) {
                var n = this;
                n.callActions("beforeCacheDom", arguments), (n.dom.document = e), (n.dom.body = n.dom.document.querySelector("body")), (n.dom.container = t), (n.dom.parent = t), n.callActions("afterCacheDom", arguments);
            },
            indexTargets: function () {
                var t = this,
                    a = null,
                    i = null,
                    o = null,
                    r = -1;
                if (
                    (t.callActions("beforeIndexTargets", arguments),
                    (t.dom.targets = t.config.layout.allowNestedTargets ? t.dom.container.querySelectorAll(t.config.selectors.target) : n.children(t.dom.container, t.config.selectors.target, t.dom.document)),
                    (t.dom.targets = n.arrayFromList(t.dom.targets)),
                    (t.targets = []),
                    (o = t.config.load.dataset) && o.length !== t.dom.targets.length)
                )
                    throw new Error(e.messages.errorDatasetPrerenderedMismatch());
                if (t.dom.targets.length) {
                    for (r = 0; (i = t.dom.targets[r]); r++) (a = new e.Target()), a.init(i, t, o ? o[r] : void 0), (a.isInDom = !0), t.targets.push(a);
                    t.dom.parent = t.dom.targets[0].parentElement === t.dom.container ? t.dom.container : t.dom.targets[0].parentElement;
                }
                (t.origOrder = t.targets), t.callActions("afterIndexTargets", arguments);
            },
            initControls: function () {
                var t = this,
                    n = "",
                    a = null,
                    i = null,
                    o = null,
                    r = null,
                    s = null,
                    l = -1,
                    c = -1;
                switch ((t.callActions("beforeInitControls", arguments), t.config.controls.scope)) {
                    case "local":
                        o = t.dom.container;
                        break;
                    case "global":
                        o = t.dom.document;
                        break;
                    default:
                        throw new Error(e.messages.errorConfigInvalidControlsScope());
                }
                for (l = 0; (n = e.controlDefinitions[l]); l++)
                    if (t.config.controls.live || n.live) {
                        if (n.parent) {
                            if (((r = t.dom[n.parent]), !r || r.length < 0)) continue;
                            "number" != typeof r.length && (r = [r]);
                        } else r = [o];
                        for (c = 0; (i = r[c]); c++) (s = t.getControl(i, n.type, n.selector)), t.controls.push(s);
                    } else for (a = o.querySelectorAll(t.config.selectors.control + n.selector), c = 0; (i = a[c]); c++) (s = t.getControl(i, n.type, "")), s && t.controls.push(s);
                t.callActions("afterInitControls", arguments);
            },
            getControl: function (t, a, i) {
                var o = this,
                    r = null,
                    s = -1;
                if ((o.callActions("beforeGetControl", arguments), !i))
                    for (s = 0; (r = e.controls[s]); s++) {
                        if (r.el === t && r.isBound(o)) return o.callFilters("controlGetControl", null, arguments);
                        if (r.el === t && r.type === a && r.selector === i) return r.addBinding(o), o.callFilters("controlGetControl", r, arguments);
                    }
                return (
                    (r = new e.Control()),
                    r.init(t, a, i),
                    (r.classNames.base = n.getClassname(o.config.classNames, a)),
                    (r.classNames.active = n.getClassname(o.config.classNames, a, o.config.classNames.modifierActive)),
                    (r.classNames.disabled = n.getClassname(o.config.classNames, a, o.config.classNames.modifierDisabled)),
                    r.addBinding(o),
                    o.callFilters("controlGetControl", r, arguments)
                );
            },
            getToggleSelector: function () {
                var t = this,
                    e = "or" === t.config.controls.toggleLogic ? ", " : "",
                    a = "";
                return (
                    t.callActions("beforeGetToggleSelector", arguments),
                    (t.toggleArray = n.clean(t.toggleArray)),
                    (a = t.toggleArray.join(e)),
                    "" === a && (a = t.config.controls.toggleDefault),
                    t.callFilters("selectorGetToggleSelector", a, arguments)
                );
            },
            buildToggleArray: function (t, e) {
                var a = this,
                    i = "";
                if ((a.callActions("beforeBuildToggleArray", arguments), t && t.filter)) i = t.filter.selector.replace(/\s/g, "");
                else {
                    if (!e) return;
                    i = e.activeFilter.selector.replace(/\s/g, "");
                }
                (i !== a.config.selectors.target && "all" !== i) || (i = ""),
                    "or" === a.config.controls.toggleLogic ? (a.toggleArray = i.split(",")) : (a.toggleArray = a.splitCompoundSelector(i)),
                    (a.toggleArray = n.clean(a.toggleArray)),
                    a.callActions("afterBuildToggleArray", arguments);
            },
            splitCompoundSelector: function (t) {
                var e = t.split(/([\.\[])/g),
                    n = [],
                    a = "",
                    i = -1;
                for ("" === e[0] && e.shift(), i = 0; i < e.length; i++) i % 2 === 0 && (a = ""), (a += e[i]), i % 2 !== 0 && n.push(a);
                return n;
            },
            updateControls: function (t) {
                var a = this,
                    i = null,
                    o = new e.CommandMultimix(),
                    r = -1;
                for (
                    a.callActions("beforeUpdateControls", arguments),
                        t.filter ? (o.filter = t.filter.selector) : (o.filter = a.state.activeFilter.selector),
                        t.sort ? (o.sort = a.buildSortString(t.sort)) : (o.sort = a.buildSortString(a.state.activeSort)),
                        o.filter === a.config.selectors.target && (o.filter = "all"),
                        "" === o.filter && (o.filter = "none"),
                        n.freeze(o),
                        r = 0;
                    (i = a.controls[r]);
                    r++
                )
                    i.update(o, a.toggleArray);
                a.callActions("afterUpdateControls", arguments);
            },
            buildSortString: function (t) {
                var e = this,
                    n = "";
                return (n += t.sortString), t.next && (n += " " + e.buildSortString(t.next)), n;
            },
            insertTargets: function (t, a) {
                var i = this,
                    o = null,
                    r = -1,
                    s = null,
                    l = null,
                    c = null,
                    u = -1;
                if (
                    (i.callActions("beforeInsertTargets", arguments),
                    "undefined" == typeof t.index && (t.index = 0),
                    (o = i.getNextSibling(t.index, t.sibling, t.position)),
                    (s = i.dom.document.createDocumentFragment()),
                    (r = o ? n.index(o, i.config.selectors.target) : i.targets.length),
                    t.collection)
                ) {
                    for (u = 0; (c = t.collection[u]); u++) {
                        if (i.dom.targets.indexOf(c) > -1) throw new Error(e.messages.errorInsertPreexistingElement());
                        (c.style.display = "none"),
                            s.appendChild(c),
                            s.appendChild(i.dom.document.createTextNode(" ")),
                            n.isElement(c, i.dom.document) && c.matches(i.config.selectors.target) && ((l = new e.Target()), l.init(c, i), (l.isInDom = !0), i.targets.splice(r, 0, l), r++);
                    }
                    i.dom.parent.insertBefore(s, o);
                }
                (a.startOrder = i.origOrder = i.targets), i.callActions("afterInsertTargets", arguments);
            },
            getNextSibling: function (t, e, n) {
                var a = this,
                    i = null;
                return (
                    (t = Math.max(t, 0)),
                    e && "before" === n
                        ? (i = e)
                        : e && "after" === n
                        ? (i = e.nextElementSibling || null)
                        : a.targets.length > 0 && "undefined" != typeof t
                        ? (i = t < a.targets.length || !a.targets.length ? a.targets[t].dom.el : a.targets[a.targets.length - 1].dom.el.nextElementSibling)
                        : 0 === a.targets.length &&
                          a.dom.parent.children.length > 0 &&
                          (a.config.layout.siblingAfter ? (i = a.config.layout.siblingAfter) : a.config.layout.siblingBefore ? (i = a.config.layout.siblingBefore.nextElementSibling) : a.dom.parent.children[0]),
                    a.callFilters("elementGetNextSibling", i, arguments)
                );
            },
            filterOperation: function (t) {
                var e = this,
                    n = !1,
                    a = -1,
                    i = "",
                    o = null,
                    r = -1;
                for (e.callActions("beforeFilterOperation", arguments), i = t.newFilter.action, r = 0; (o = t.newOrder[r]); r++)
                    (n = t.newFilter.collection ? t.newFilter.collection.indexOf(o.dom.el) > -1 : "" !== t.newFilter.selector && o.dom.el.matches(t.newFilter.selector)), e.evaluateHideShow(n, o, i, t);
                if (t.toRemove.length) for (r = 0; (o = t.show[r]); r++) t.toRemove.indexOf(o) > -1 && (t.show.splice(r, 1), (a = t.toShow.indexOf(o)) > -1 && t.toShow.splice(a, 1), t.toHide.push(o), t.hide.push(o), r--);
                (t.matching = t.show.slice()), 0 === t.show.length && "" !== t.newFilter.selector && 0 !== e.targets.length && (t.hasFailed = !0), e.callActions("afterFilterOperation", arguments);
            },
            evaluateHideShow: function (t, e, n, a) {
                var i = this,
                    o = !1,
                    r = Array.prototype.slice.call(arguments, 1);
                (o = i.callFilters("testResultEvaluateHideShow", t, r)),
                    i.callActions("beforeEvaluateHideShow", arguments),
                    (o === !0 && "show" === n) || (o === !1 && "hide" === n) ? (a.show.push(e), !e.isShown && a.toShow.push(e)) : (a.hide.push(e), e.isShown && a.toHide.push(e)),
                    i.callActions("afterEvaluateHideShow", arguments);
            },
            sortOperation: function (t) {
                var a = this,
                    i = [],
                    o = null,
                    r = null,
                    s = -1;
                if ((a.callActions("beforeSortOperation", arguments), (t.startOrder = a.targets), t.newSort.collection)) {
                    for (i = [], s = 0; (r = t.newSort.collection[s]); s++) {
                        if (a.dom.targets.indexOf(r) < 0) throw new Error(e.messages.errorSortNonExistentElement());
                        (o = new e.Target()), o.init(r, a), (o.isInDom = !0), i.push(o);
                    }
                    t.newOrder = i;
                } else
                    "random" === t.newSort.order
                        ? (t.newOrder = n.arrayShuffle(t.startOrder))
                        : "" === t.newSort.attribute
                        ? ((t.newOrder = a.origOrder.slice()), "desc" === t.newSort.order && t.newOrder.reverse())
                        : ((t.newOrder = t.startOrder.slice()),
                          t.newOrder.sort(function (e, n) {
                              return a.compare(e, n, t.newSort);
                          }));
                n.isEqualArray(t.newOrder, t.startOrder) && (t.willSort = !1), a.callActions("afterSortOperation", arguments);
            },
            compare: function (t, e, n) {
                var a = this,
                    i = n.order,
                    o = a.getAttributeValue(t, n.attribute),
                    r = a.getAttributeValue(e, n.attribute);
                return (
                    isNaN(1 * o) || isNaN(1 * r) ? ((o = o.toLowerCase()), (r = r.toLowerCase())) : ((o = 1 * o), (r = 1 * r)),
                    o < r ? ("asc" === i ? -1 : 1) : o > r ? ("asc" === i ? 1 : -1) : o === r && n.next ? a.compare(t, e, n.next) : 0
                );
            },
            getAttributeValue: function (t, n) {
                var a = this,
                    i = "";
                return (
                    (i = t.dom.el.getAttribute("data-" + n)),
                    null === i && a.config.debug.showWarnings && console.warn(e.messages.warningInconsistentSortingAttributes({ attribute: "data-" + n })),
                    a.callFilters("valueGetAttributeValue", i || 0, arguments)
                );
            },
            printSort: function (e, a) {
                var i = this,
                    o = e ? a.newOrder : a.startOrder,
                    r = e ? a.startOrder : a.newOrder,
                    s = o.length ? o[o.length - 1].dom.el.nextElementSibling : null,
                    l = t.document.createDocumentFragment(),
                    c = null,
                    u = null,
                    f = null,
                    h = -1;
                for (i.callActions("beforePrintSort", arguments), h = 0; (u = o[h]); h++) (f = u.dom.el), "absolute" !== f.style.position && (n.removeWhitespace(f.previousSibling), f.parentElement.removeChild(f));
                for (c = s ? s.previousSibling : i.dom.parent.lastChild, c && "#text" === c.nodeName && n.removeWhitespace(c), h = 0; (u = r[h]); h++)
                    (f = u.dom.el), n.isElement(l.lastChild) && l.appendChild(t.document.createTextNode(" ")), l.appendChild(f);
                i.dom.parent.firstChild && i.dom.parent.firstChild !== s && l.insertBefore(t.document.createTextNode(" "), l.childNodes[0]),
                    s ? (l.appendChild(t.document.createTextNode(" ")), i.dom.parent.insertBefore(l, s)) : i.dom.parent.appendChild(l),
                    i.callActions("afterPrintSort", arguments);
            },
            parseSortString: function (t, a) {
                var i = this,
                    o = t.split(" "),
                    r = a,
                    s = [],
                    l = -1;
                for (l = 0; l < o.length; l++) {
                    switch (((s = o[l].split(":")), (r.sortString = o[l]), (r.attribute = n.dashCase(s[0])), (r.order = s[1] || "asc"), r.attribute)) {
                        case "default":
                            r.attribute = "";
                            break;
                        case "random":
                            (r.attribute = ""), (r.order = "random");
                    }
                    if (!r.attribute || "random" === r.order) break;
                    l < o.length - 1 && ((r.next = new e.CommandSort()), n.freeze(r), (r = r.next));
                }
                return i.callFilters("commandsParseSort", a, arguments);
            },
            parseEffects: function () {
                var t = this,
                    n = "",
                    a = t.config.animation.effectsIn || t.config.animation.effects,
                    i = t.config.animation.effectsOut || t.config.animation.effects;
                t.callActions("beforeParseEffects", arguments),
                    (t.effectsIn = new e.StyleData()),
                    (t.effectsOut = new e.StyleData()),
                    (t.transformIn = []),
                    (t.transformOut = []),
                    (t.effectsIn.opacity = t.effectsOut.opacity = 1),
                    t.parseEffect("fade", a, t.effectsIn, t.transformIn),
                    t.parseEffect("fade", i, t.effectsOut, t.transformOut, !0);
                for (n in e.transformDefaults) e.transformDefaults[n] instanceof e.TransformData && (t.parseEffect(n, a, t.effectsIn, t.transformIn), t.parseEffect(n, i, t.effectsOut, t.transformOut, !0));
                t.parseEffect("stagger", a, t.effectsIn, t.transformIn), t.parseEffect("stagger", i, t.effectsOut, t.transformOut, !0), t.callActions("afterParseEffects", arguments);
            },
            parseEffect: function (t, n, a, i, o) {
                var r = this,
                    s = /\(([^)]+)\)/,
                    l = -1,
                    c = "",
                    u = [],
                    f = "",
                    h = ["%", "px", "em", "rem", "vh", "vw", "deg"],
                    d = "",
                    m = -1;
                if ((r.callActions("beforeParseEffect", arguments), "string" != typeof n)) throw new TypeError(e.messages.errorConfigInvalidAnimationEffects());
                if (n.indexOf(t) < 0) return void ("stagger" === t && (r.staggerDuration = 0));
                switch (((l = n.indexOf(t + "(")), l > -1 && ((c = n.substring(l)), (u = s.exec(c)), (f = u[1])), t)) {
                    case "fade":
                        a.opacity = f ? parseFloat(f) : 0;
                        break;
                    case "stagger":
                        r.staggerDuration = f ? parseFloat(f) : 100;
                        break;
                    default:
                        if ((o && r.config.animation.reverseOut && "scale" !== t ? (a[t].value = (f ? parseFloat(f) : e.transformDefaults[t].value) * -1) : (a[t].value = f ? parseFloat(f) : e.transformDefaults[t].value), f)) {
                            for (m = 0; (d = h[m]); m++)
                                if (f.indexOf(d) > -1) {
                                    a[t].unit = d;
                                    break;
                                }
                        } else a[t].unit = e.transformDefaults[t].unit;
                        i.push(t + "(" + a[t].value + a[t].unit + ")");
                }
                r.callActions("afterParseEffect", arguments);
            },
            buildState: function (t) {
                var n = this,
                    a = new e.State(),
                    i = null,
                    o = -1;
                for (n.callActions("beforeBuildState", arguments), o = 0; (i = n.targets[o]); o++) (!t.toRemove.length || t.toRemove.indexOf(i) < 0) && a.targets.push(i.dom.el);
                for (o = 0; (i = t.matching[o]); o++) a.matching.push(i.dom.el);
                for (o = 0; (i = t.show[o]); o++) a.show.push(i.dom.el);
                for (o = 0; (i = t.hide[o]); o++) (!t.toRemove.length || t.toRemove.indexOf(i) < 0) && a.hide.push(i.dom.el);
                return (
                    (a.id = n.id),
                    (a.container = n.dom.container),
                    (a.activeFilter = t.newFilter),
                    (a.activeSort = t.newSort),
                    (a.activeDataset = t.newDataset),
                    (a.activeContainerClassName = t.newContainerClassName),
                    (a.hasFailed = t.hasFailed),
                    (a.totalTargets = n.targets.length),
                    (a.totalShow = t.show.length),
                    (a.totalHide = t.hide.length),
                    (a.totalMatching = t.matching.length),
                    (a.triggerElement = t.triggerElement),
                    n.callFilters("stateBuildState", a, arguments)
                );
            },
            goMix: function (a, i) {
                var o = this,
                    r = null;
                return (
                    o.callActions("beforeGoMix", arguments),
                    (o.config.animation.duration && o.config.animation.effects && n.isVisible(o.dom.container)) || (a = !1),
                    i.toShow.length || i.toHide.length || i.willSort || i.willChangeLayout || (a = !1),
                    i.startState.show.length || i.show.length || (a = !1),
                    e.events.fire("mixStart", o.dom.container, { state: i.startState, futureState: i.newState, instance: o }, o.dom.document),
                    "function" == typeof o.config.callbacks.onMixStart && o.config.callbacks.onMixStart.call(o.dom.container, i.startState, i.newState, o),
                    n.removeClass(o.dom.container, n.getClassname(o.config.classNames, "container", o.config.classNames.modifierFailed)),
                    (r = o.userDeferred ? o.userDeferred : (o.userDeferred = n.defer(e.libraries))),
                    (o.isBusy = !0),
                    a && e.features.has.transitions
                        ? (t.pageYOffset !== i.docState.scrollTop && t.scrollTo(i.docState.scrollLeft, i.docState.scrollTop),
                          o.config.animation.applyPerspective &&
                              ((o.dom.parent.style[e.features.perspectiveProp] = o.config.animation.perspectiveDistance), (o.dom.parent.style[e.features.perspectiveOriginProp] = o.config.animation.perspectiveOrigin)),
                          o.config.animation.animateResizeContainer && i.startHeight !== i.newHeight && i.viewportDeltaY !== i.startHeight - i.newHeight && (o.dom.parent.style.height = i.startHeight + "px"),
                          o.config.animation.animateResizeContainer && i.startWidth !== i.newWidth && i.viewportDeltaX !== i.startWidth - i.newWidth && (o.dom.parent.style.width = i.startWidth + "px"),
                          i.startHeight === i.newHeight && (o.dom.parent.style.height = i.startHeight + "px"),
                          i.startWidth === i.newWidth && (o.dom.parent.style.width = i.startWidth + "px"),
                          i.startHeight === i.newHeight && i.startWidth === i.newWidth && (o.dom.parent.style.overflow = "hidden"),
                          requestAnimationFrame(function () {
                              o.moveTargets(i);
                          }),
                          o.callFilters("promiseGoMix", r.promise, arguments))
                        : (o.config.debug.fauxAsync
                              ? setTimeout(function () {
                                    o.cleanUp(i);
                                }, o.config.animation.duration)
                              : o.cleanUp(i),
                          o.callFilters("promiseGoMix", r.promise, arguments))
                );
            },
            getStartMixData: function (n) {
                var a = this,
                    i = t.getComputedStyle(a.dom.parent),
                    o = a.dom.parent.getBoundingClientRect(),
                    r = null,
                    s = {},
                    l = -1,
                    c = i[e.features.boxSizingProp];
                for (a.incPadding = "border-box" === c, a.callActions("beforeGetStartMixData", arguments), l = 0; (r = n.show[l]); l++) (s = r.getPosData()), (n.showPosData[l] = { startPosData: s });
                for (l = 0; (r = n.toHide[l]); l++) (s = r.getPosData()), (n.toHidePosData[l] = { startPosData: s });
                (n.startX = o.left),
                    (n.startY = o.top),
                    (n.startHeight = a.incPadding ? o.height : o.height - parseFloat(i.paddingTop) - parseFloat(i.paddingBottom) - parseFloat(i.borderTop) - parseFloat(i.borderBottom)),
                    (n.startWidth = a.incPadding ? o.width : o.width - parseFloat(i.paddingLeft) - parseFloat(i.paddingRight) - parseFloat(i.borderLeft) - parseFloat(i.borderRight)),
                    a.callActions("afterGetStartMixData", arguments);
            },
            setInter: function (t) {
                var e = this,
                    a = null,
                    i = -1;
                for (
                    e.callActions("beforeSetInter", arguments),
                        e.config.animation.clampHeight && ((e.dom.parent.style.height = t.startHeight + "px"), (e.dom.parent.style.overflow = "hidden")),
                        e.config.animation.clampWidth && ((e.dom.parent.style.width = t.startWidth + "px"), (e.dom.parent.style.overflow = "hidden")),
                        i = 0;
                    (a = t.toShow[i]);
                    i++
                )
                    a.show();
                t.willChangeLayout && (n.removeClass(e.dom.container, t.startContainerClassName), n.addClass(e.dom.container, t.newContainerClassName)), e.callActions("afterSetInter", arguments);
            },
            getInterMixData: function (t) {
                var e = this,
                    n = null,
                    a = -1;
                for (e.callActions("beforeGetInterMixData", arguments), a = 0; (n = t.show[a]); a++) t.showPosData[a].interPosData = n.getPosData();
                for (a = 0; (n = t.toHide[a]); a++) t.toHidePosData[a].interPosData = n.getPosData();
                e.callActions("afterGetInterMixData", arguments);
            },
            setFinal: function (t) {
                var e = this,
                    n = null,
                    a = -1;
                for (e.callActions("beforeSetFinal", arguments), t.willSort && e.printSort(!1, t), a = 0; (n = t.toHide[a]); a++) n.hide();
                e.callActions("afterSetFinal", arguments);
            },
            getFinalMixData: function (e) {
                var a = this,
                    i = null,
                    o = null,
                    r = null,
                    s = -1;
                for (a.callActions("beforeGetFinalMixData", arguments), s = 0; (r = e.show[s]); s++) e.showPosData[s].finalPosData = r.getPosData();
                for (s = 0; (r = e.toHide[s]); s++) e.toHidePosData[s].finalPosData = r.getPosData();
                for (
                    (a.config.animation.clampHeight || a.config.animation.clampWidth) && (a.dom.parent.style.height = a.dom.parent.style.width = a.dom.parent.style.overflow = ""),
                        a.incPadding || (i = t.getComputedStyle(a.dom.parent)),
                        o = a.dom.parent.getBoundingClientRect(),
                        e.newX = o.left,
                        e.newY = o.top,
                        e.newHeight = a.incPadding ? o.height : o.height - parseFloat(i.paddingTop) - parseFloat(i.paddingBottom) - parseFloat(i.borderTop) - parseFloat(i.borderBottom),
                        e.newWidth = a.incPadding ? o.width : o.width - parseFloat(i.paddingLeft) - parseFloat(i.paddingRight) - parseFloat(i.borderLeft) - parseFloat(i.borderRight),
                        e.viewportDeltaX = e.docState.viewportWidth - this.dom.document.documentElement.clientWidth,
                        e.viewportDeltaY = e.docState.viewportHeight - this.dom.document.documentElement.clientHeight,
                        e.willSort && a.printSort(!0, e),
                        s = 0;
                    (r = e.toShow[s]);
                    s++
                )
                    r.hide();
                for (s = 0; (r = e.toHide[s]); s++) r.show();
                e.willChangeLayout && (n.removeClass(a.dom.container, e.newContainerClassName), n.addClass(a.dom.container, a.config.layout.containerClassName)), a.callActions("afterGetFinalMixData", arguments);
            },
            getTweenData: function (t) {
                var n = this,
                    a = null,
                    i = null,
                    o = Object.getOwnPropertyNames(n.effectsIn),
                    r = "",
                    s = null,
                    l = -1,
                    c = -1,
                    u = -1,
                    f = -1;
                for (n.callActions("beforeGetTweenData", arguments), u = 0; (a = t.show[u]); u++)
                    for (
                        i = t.showPosData[u],
                            i.posIn = new e.StyleData(),
                            i.posOut = new e.StyleData(),
                            i.tweenData = new e.StyleData(),
                            a.isShown ? ((i.posIn.x = i.startPosData.x - i.interPosData.x), (i.posIn.y = i.startPosData.y - i.interPosData.y)) : (i.posIn.x = i.posIn.y = 0),
                            i.posOut.x = i.finalPosData.x - i.interPosData.x,
                            i.posOut.y = i.finalPosData.y - i.interPosData.y,
                            i.posIn.opacity = a.isShown ? 1 : n.effectsIn.opacity,
                            i.posOut.opacity = 1,
                            i.tweenData.opacity = i.posOut.opacity - i.posIn.opacity,
                            a.isShown || n.config.animation.nudge || ((i.posIn.x = i.posOut.x), (i.posIn.y = i.posOut.y)),
                            i.tweenData.x = i.posOut.x - i.posIn.x,
                            i.tweenData.y = i.posOut.y - i.posIn.y,
                            n.config.animation.animateResizeTargets &&
                                ((i.posIn.width = i.startPosData.width),
                                (i.posIn.height = i.startPosData.height),
                                (l = (i.startPosData.width || i.finalPosData.width) - i.interPosData.width),
                                (i.posIn.marginRight = i.startPosData.marginRight - l),
                                (c = (i.startPosData.height || i.finalPosData.height) - i.interPosData.height),
                                (i.posIn.marginBottom = i.startPosData.marginBottom - c),
                                (i.posOut.width = i.finalPosData.width),
                                (i.posOut.height = i.finalPosData.height),
                                (l = (i.finalPosData.width || i.startPosData.width) - i.interPosData.width),
                                (i.posOut.marginRight = i.finalPosData.marginRight - l),
                                (c = (i.finalPosData.height || i.startPosData.height) - i.interPosData.height),
                                (i.posOut.marginBottom = i.finalPosData.marginBottom - c),
                                (i.tweenData.width = i.posOut.width - i.posIn.width),
                                (i.tweenData.height = i.posOut.height - i.posIn.height),
                                (i.tweenData.marginRight = i.posOut.marginRight - i.posIn.marginRight),
                                (i.tweenData.marginBottom = i.posOut.marginBottom - i.posIn.marginBottom)),
                            f = 0;
                        (r = o[f]);
                        f++
                    )
                        (s = n.effectsIn[r]),
                            s instanceof e.TransformData &&
                                s.value &&
                                ((i.posIn[r].value = s.value), (i.posOut[r].value = 0), (i.tweenData[r].value = i.posOut[r].value - i.posIn[r].value), (i.posIn[r].unit = i.posOut[r].unit = i.tweenData[r].unit = s.unit));
                for (u = 0; (a = t.toHide[u]); u++)
                    for (
                        i = t.toHidePosData[u],
                            i.posIn = new e.StyleData(),
                            i.posOut = new e.StyleData(),
                            i.tweenData = new e.StyleData(),
                            i.posIn.x = a.isShown ? i.startPosData.x - i.interPosData.x : 0,
                            i.posIn.y = a.isShown ? i.startPosData.y - i.interPosData.y : 0,
                            i.posOut.x = n.config.animation.nudge ? 0 : i.posIn.x,
                            i.posOut.y = n.config.animation.nudge ? 0 : i.posIn.y,
                            i.tweenData.x = i.posOut.x - i.posIn.x,
                            i.tweenData.y = i.posOut.y - i.posIn.y,
                            n.config.animation.animateResizeTargets &&
                                ((i.posIn.width = i.startPosData.width),
                                (i.posIn.height = i.startPosData.height),
                                (l = i.startPosData.width - i.interPosData.width),
                                (i.posIn.marginRight = i.startPosData.marginRight - l),
                                (c = i.startPosData.height - i.interPosData.height),
                                (i.posIn.marginBottom = i.startPosData.marginBottom - c)),
                            i.posIn.opacity = 1,
                            i.posOut.opacity = n.effectsOut.opacity,
                            i.tweenData.opacity = i.posOut.opacity - i.posIn.opacity,
                            f = 0;
                        (r = o[f]);
                        f++
                    )
                        (s = n.effectsOut[r]),
                            s instanceof e.TransformData &&
                                s.value &&
                                ((i.posIn[r].value = 0), (i.posOut[r].value = s.value), (i.tweenData[r].value = i.posOut[r].value - i.posIn[r].value), (i.posIn[r].unit = i.posOut[r].unit = i.tweenData[r].unit = s.unit));
                n.callActions("afterGetTweenData", arguments);
            },
            moveTargets: function (t) {
                var a = this,
                    i = null,
                    o = null,
                    r = null,
                    s = "",
                    l = !1,
                    c = -1,
                    u = -1,
                    f = a.checkProgress.bind(a);
                for (a.callActions("beforeMoveTargets", arguments), u = 0; (i = t.show[u]); u++)
                    (o = new e.IMoveData()),
                        (r = t.showPosData[u]),
                        (s = i.isShown ? "none" : "show"),
                        (l = a.willTransition(s, t.hasEffect, r.posIn, r.posOut)),
                        l && c++,
                        i.show(),
                        (o.posIn = r.posIn),
                        (o.posOut = r.posOut),
                        (o.statusChange = s),
                        (o.staggerIndex = c),
                        (o.operation = t),
                        (o.callback = l ? f : null),
                        i.move(o);
                for (u = 0; (i = t.toHide[u]); u++)
                    (r = t.toHidePosData[u]),
                        (o = new e.IMoveData()),
                        (s = "hide"),
                        (l = a.willTransition(s, r.posIn, r.posOut)),
                        (o.posIn = r.posIn),
                        (o.posOut = r.posOut),
                        (o.statusChange = s),
                        (o.staggerIndex = u),
                        (o.operation = t),
                        (o.callback = l ? f : null),
                        i.move(o);
                a.config.animation.animateResizeContainer &&
                    ((a.dom.parent.style[e.features.transitionProp] = "height " + a.config.animation.duration + "ms ease, width " + a.config.animation.duration + "ms ease "),
                    requestAnimationFrame(function () {
                        t.startHeight !== t.newHeight && t.viewportDeltaY !== t.startHeight - t.newHeight && (a.dom.parent.style.height = t.newHeight + "px"),
                            t.startWidth !== t.newWidth && t.viewportDeltaX !== t.startWidth - t.newWidth && (a.dom.parent.style.width = t.newWidth + "px");
                    })),
                    t.willChangeLayout && (n.removeClass(a.dom.container, a.config.layout.ContainerClassName), n.addClass(a.dom.container, t.newContainerClassName)),
                    a.callActions("afterMoveTargets", arguments);
            },
            hasEffect: function () {
                var t = this,
                    e = ["scale", "translateX", "translateY", "translateZ", "rotateX", "rotateY", "rotateZ"],
                    n = "",
                    a = null,
                    i = !1,
                    o = -1,
                    r = -1;
                if (1 !== t.effectsIn.opacity) return t.callFilters("resultHasEffect", !0, arguments);
                for (r = 0; (n = e[r]); r++)
                    if (((a = t.effectsIn[n]), (o = "undefined" !== a.value ? a.value : a), 0 !== o)) {
                        i = !0;
                        break;
                    }
                return t.callFilters("resultHasEffect", i, arguments);
            },
            willTransition: function (t, e, a, i) {
                var o = this,
                    r = !1;
                return (
                    (r =
                        !!n.isVisible(o.dom.container) &&
                        (!!(("none" !== t && e) || a.x !== i.x || a.y !== i.y) ||
                            (!!o.config.animation.animateResizeTargets && (a.width !== i.width || a.height !== i.height || a.marginRight !== i.marginRight || a.marginTop !== i.marginTop)))),
                    o.callFilters("resultWillTransition", r, arguments)
                );
            },
            checkProgress: function (t) {
                var e = this;
                e.targetsDone++, e.targetsBound === e.targetsDone && e.cleanUp(t);
            },
            cleanUp: function (t) {
                var a = this,
                    i = null,
                    o = null,
                    r = null,
                    s = null,
                    l = -1;
                for (a.callActions("beforeCleanUp", arguments), a.targetsMoved = a.targetsImmovable = a.targetsBound = a.targetsDone = 0, l = 0; (i = t.show[l]); l++) i.cleanUp(), i.show();
                for (l = 0; (i = t.toHide[l]); l++) i.cleanUp(), i.hide();
                if (
                    (t.willSort && a.printSort(!1, t),
                    (a.dom.parent.style[e.features.transitionProp] = a.dom.parent.style.height = a.dom.parent.style.width = a.dom.parent.style.overflow = a.dom.parent.style[e.features.perspectiveProp] = a.dom.parent.style[
                        e.features.perspectiveOriginProp
                    ] = ""),
                    t.willChangeLayout && (n.removeClass(a.dom.container, t.startContainerClassName), n.addClass(a.dom.container, t.newContainerClassName)),
                    t.toRemove.length)
                ) {
                    for (l = 0; (i = a.targets[l]); l++)
                        t.toRemove.indexOf(i) > -1 &&
                            ((o = i.dom.el.previousSibling) && "#text" === o.nodeName && (r = i.dom.el.nextSibling) && "#text" === r.nodeName && n.removeWhitespace(o),
                            t.willSort || a.dom.parent.removeChild(i.dom.el),
                            a.targets.splice(l, 1),
                            (i.isInDom = !1),
                            l--);
                    a.origOrder = a.targets;
                }
                t.willSort && (a.targets = t.newOrder),
                    (a.state = t.newState),
                    (a.lastOperation = t),
                    (a.dom.targets = a.state.targets),
                    e.events.fire("mixEnd", a.dom.container, { state: a.state, instance: a }, a.dom.document),
                    "function" == typeof a.config.callbacks.onMixEnd && a.config.callbacks.onMixEnd.call(a.dom.container, a.state, a),
                    t.hasFailed &&
                        (e.events.fire("mixFail", a.dom.container, { state: a.state, instance: a }, a.dom.document),
                        "function" == typeof a.config.callbacks.onMixFail && a.config.callbacks.onMixFail.call(a.dom.container, a.state, a),
                        n.addClass(a.dom.container, n.getClassname(a.config.classNames, "container", a.config.classNames.modifierFailed))),
                    "function" == typeof a.userCallback && a.userCallback.call(a.dom.container, a.state, a),
                    "function" == typeof a.userDeferred.resolve && a.userDeferred.resolve(a.state),
                    (a.userCallback = null),
                    (a.userDeferred = null),
                    (a.lastClicked = null),
                    (a.isToggling = !1),
                    (a.isBusy = !1),
                    a.queue.length &&
                        (a.callActions("beforeReadQueueCleanUp", arguments),
                        (s = a.queue.shift()),
                        (a.userDeferred = s.deferred),
                        (a.isToggling = s.isToggling),
                        (a.lastClicked = s.triggerElement),
                        s.instruction.command instanceof e.CommandMultimix ? a.multimix.apply(a, s.args) : a.dataset.apply(a, s.args)),
                    a.callActions("afterCleanUp", arguments);
            },
            parseMultimixArgs: function (t) {
                var a = this,
                    i = new e.UserInstruction(),
                    o = null,
                    r = -1;
                for (i.animate = a.config.animation.enable, i.command = new e.CommandMultimix(), r = 0; r < t.length; r++)
                    (o = t[r]), null !== o && ("object" == typeof o ? n.extend(i.command, o) : "boolean" == typeof o ? (i.animate = o) : "function" == typeof o && (i.callback = o));
                return (
                    !i.command.insert || i.command.insert instanceof e.CommandInsert || (i.command.insert = a.parseInsertArgs([i.command.insert]).command),
                    !i.command.remove || i.command.remove instanceof e.CommandRemove || (i.command.remove = a.parseRemoveArgs([i.command.remove]).command),
                    !i.command.filter || i.command.filter instanceof e.CommandFilter || (i.command.filter = a.parseFilterArgs([i.command.filter]).command),
                    !i.command.sort || i.command.sort instanceof e.CommandSort || (i.command.sort = a.parseSortArgs([i.command.sort]).command),
                    !i.command.changeLayout || i.command.changeLayout instanceof e.CommandChangeLayout || (i.command.changeLayout = a.parseChangeLayoutArgs([i.command.changeLayout]).command),
                    (i = a.callFilters("instructionParseMultimixArgs", i, arguments)),
                    n.freeze(i),
                    i
                );
            },
            parseFilterArgs: function (t) {
                var a = this,
                    i = new e.UserInstruction(),
                    o = null,
                    r = -1;
                for (i.animate = a.config.animation.enable, i.command = new e.CommandFilter(), r = 0; r < t.length; r++)
                    (o = t[r]),
                        "string" == typeof o
                            ? (i.command.selector = o)
                            : null === o
                            ? (i.command.collection = [])
                            : "object" == typeof o && n.isElement(o, a.dom.document)
                            ? (i.command.collection = [o])
                            : "object" == typeof o && "undefined" != typeof o.length
                            ? (i.command.collection = n.arrayFromList(o))
                            : "object" == typeof o
                            ? n.extend(i.command, o)
                            : "boolean" == typeof o
                            ? (i.animate = o)
                            : "function" == typeof o && (i.callback = o);
                if (i.command.selector && i.command.collection) throw new Error(e.messages.errorFilterInvalidArguments());
                return (i = a.callFilters("instructionParseFilterArgs", i, arguments)), n.freeze(i), i;
            },
            parseSortArgs: function (t) {
                var a = this,
                    i = new e.UserInstruction(),
                    o = null,
                    r = "",
                    s = -1;
                for (i.animate = a.config.animation.enable, i.command = new e.CommandSort(), s = 0; s < t.length; s++)
                    if (((o = t[s]), null !== o))
                        switch (typeof o) {
                            case "string":
                                r = o;
                                break;
                            case "object":
                                o.length && (i.command.collection = n.arrayFromList(o));
                                break;
                            case "boolean":
                                i.animate = o;
                                break;
                            case "function":
                                i.callback = o;
                        }
                return r && (i.command = a.parseSortString(r, i.command)), (i = a.callFilters("instructionParseSortArgs", i, arguments)), n.freeze(i), i;
            },
            parseInsertArgs: function (t) {
                var a = this,
                    i = new e.UserInstruction(),
                    o = null,
                    r = -1;
                for (i.animate = a.config.animation.enable, i.command = new e.CommandInsert(), r = 0; r < t.length; r++)
                    (o = t[r]),
                        null !== o &&
                            ("number" == typeof o
                                ? (i.command.index = o)
                                : "string" == typeof o && ["before", "after"].indexOf(o) > -1
                                ? (i.command.position = o)
                                : "string" == typeof o
                                ? (i.command.collection = n.arrayFromList(n.createElement(o).childNodes))
                                : "object" == typeof o && n.isElement(o, a.dom.document)
                                ? i.command.collection.length
                                    ? (i.command.sibling = o)
                                    : (i.command.collection = [o])
                                : "object" == typeof o && o.length
                                ? i.command.collection.length
                                    ? (i.command.sibling = o[0])
                                    : (i.command.collection = o)
                                : "object" == typeof o && o.childNodes && o.childNodes.length
                                ? i.command.collection.length
                                    ? (i.command.sibling = o.childNodes[0])
                                    : (i.command.collection = n.arrayFromList(o.childNodes))
                                : "object" == typeof o
                                ? n.extend(i.command, o)
                                : "boolean" == typeof o
                                ? (i.animate = o)
                                : "function" == typeof o && (i.callback = o));
                if (i.command.index && i.command.sibling) throw new Error(e.messages.errorInsertInvalidArguments());
                return !i.command.collection.length && a.config.debug.showWarnings && console.warn(e.messages.warningInsertNoElements()), (i = a.callFilters("instructionParseInsertArgs", i, arguments)), n.freeze(i), i;
            },
            parseRemoveArgs: function (t) {
                var a = this,
                    i = new e.UserInstruction(),
                    o = null,
                    r = null,
                    s = -1;
                for (i.animate = a.config.animation.enable, i.command = new e.CommandRemove(), s = 0; s < t.length; s++)
                    if (((r = t[s]), null !== r))
                        switch (typeof r) {
                            case "number":
                                a.targets[r] && (i.command.targets[0] = a.targets[r]);
                                break;
                            case "string":
                                i.command.collection = n.arrayFromList(a.dom.parent.querySelectorAll(r));
                                break;
                            case "object":
                                r && r.length ? (i.command.collection = r) : n.isElement(r, a.dom.document) ? (i.command.collection = [r]) : n.extend(i.command, r);
                                break;
                            case "boolean":
                                i.animate = r;
                                break;
                            case "function":
                                i.callback = r;
                        }
                if (i.command.collection.length) for (s = 0; (o = a.targets[s]); s++) i.command.collection.indexOf(o.dom.el) > -1 && i.command.targets.push(o);
                return !i.command.targets.length && a.config.debug.showWarnings && console.warn(e.messages.warningRemoveNoElements()), n.freeze(i), i;
            },
            parseDatasetArgs: function (t) {
                var a = this,
                    i = new e.UserInstruction(),
                    o = null,
                    r = -1;
                for (i.animate = a.config.animation.enable, i.command = new e.CommandDataset(), r = 0; r < t.length; r++)
                    if (((o = t[r]), null !== o))
                        switch (typeof o) {
                            case "object":
                                Array.isArray(o) || "number" == typeof o.length ? (i.command.dataset = o) : n.extend(i.command, o);
                                break;
                            case "boolean":
                                i.animate = o;
                                break;
                            case "function":
                                i.callback = o;
                        }
                return n.freeze(i), i;
            },
            parseChangeLayoutArgs: function (t) {
                var a = this,
                    i = new e.UserInstruction(),
                    o = null,
                    r = -1;
                for (i.animate = a.config.animation.enable, i.command = new e.CommandChangeLayout(), r = 0; r < t.length; r++)
                    if (((o = t[r]), null !== o))
                        switch (typeof o) {
                            case "string":
                                i.command.containerClassName = o;
                                break;
                            case "object":
                                n.extend(i.command, o);
                                break;
                            case "boolean":
                                i.animate = o;
                                break;
                            case "function":
                                i.callback = o;
                        }
                return n.freeze(i), i;
            },
            queueMix: function (t) {
                var a = this,
                    i = null,
                    o = "";
                return (
                    a.callActions("beforeQueueMix", arguments),
                    (i = n.defer(e.libraries)),
                    a.config.animation.queue && a.queue.length < a.config.animation.queueLimit
                        ? ((t.deferred = i),
                          a.queue.push(t),
                          a.config.controls.enable && (a.isToggling ? (a.buildToggleArray(t.instruction.command), (o = a.getToggleSelector()), a.updateControls({ filter: { selector: o } })) : a.updateControls(t.instruction.command)))
                        : (a.config.debug.showWarnings && console.warn(e.messages.warningMultimixInstanceQueueFull()),
                          i.resolve(a.state),
                          e.events.fire("mixBusy", a.dom.container, { state: a.state, instance: a }, a.dom.document),
                          "function" == typeof a.config.callbacks.onMixBusy && a.config.callbacks.onMixBusy.call(a.dom.container, a.state, a)),
                    a.callFilters("promiseQueueMix", i.promise, arguments)
                );
            },
            getDataOperation: function (t) {
                var a = this,
                    i = new e.Operation(),
                    o = [];
                if (((i = a.callFilters("operationUnmappedGetDataOperation", i, arguments)), a.dom.targets.length && !(o = a.state.activeDataset || []).length)) throw new Error(e.messages.errorDatasetNotSet());
                return (
                    (i.id = n.randomHex()),
                    (i.startState = a.state),
                    (i.startDataset = o),
                    (i.newDataset = t.slice()),
                    a.diffDatasets(i),
                    (i.startOrder = a.targets),
                    (i.newOrder = i.show),
                    a.config.animation.enable &&
                        (a.getStartMixData(i), a.setInter(i), (i.docState = n.getDocumentState(a.dom.document)), a.getInterMixData(i), a.setFinal(i), a.getFinalMixData(i), a.parseEffects(), (i.hasEffect = a.hasEffect()), a.getTweenData(i)),
                    (a.targets = i.show.slice()),
                    (i.newState = a.buildState(i)),
                    Array.prototype.push.apply(a.targets, i.toRemove),
                    (i = a.callFilters("operationMappedGetDataOperation", i, arguments))
                );
            },
            diffDatasets: function (t) {
                var a = this,
                    i = [],
                    o = [],
                    r = [],
                    s = null,
                    l = null,
                    c = null,
                    u = null,
                    f = null,
                    h = {},
                    d = "",
                    m = -1;
                for (a.callActions("beforeDiffDatasets", arguments), m = 0; (s = t.newDataset[m]); m++) {
                    if ("undefined" == typeof (d = s[a.config.data.uidKey]) || d.toString().length < 1) throw new TypeError(e.messages.errorDatasetInvalidUidKey({ uidKey: a.config.data.uidKey }));
                    if (h[d]) throw new Error(e.messages.errorDatasetDuplicateUid({ uid: d }));
                    (h[d] = !0),
                        (l = a.cache[d]) instanceof e.Target
                            ? (a.config.data.dirtyCheck &&
                                  !n.deepEquals(s, l.data) &&
                                  ((c = l.render(s)),
                                  (l.data = s),
                                  c !== l.dom.el && (l.isInDom && (l.unbindEvents(), a.dom.parent.replaceChild(c, l.dom.el)), l.isShown || (c.style.display = "none"), (l.dom.el = c), l.isInDom && l.bindEvents())),
                              (c = l.dom.el))
                            : ((l = new e.Target()), l.init(null, a, s), l.hide()),
                        l.isInDom
                            ? ((f = l.dom.el.nextElementSibling), o.push(d), u && (u.lastElementChild && u.appendChild(a.dom.document.createTextNode(" ")), a.insertDatasetFrag(u, l.dom.el, r), (u = null)))
                            : (u || (u = a.dom.document.createDocumentFragment()),
                              u.lastElementChild && u.appendChild(a.dom.document.createTextNode(" ")),
                              u.appendChild(l.dom.el),
                              (l.isInDom = !0),
                              l.unbindEvents(),
                              l.bindEvents(),
                              l.hide(),
                              t.toShow.push(l),
                              r.push(l)),
                        t.show.push(l);
                }
                for (u && ((f = f || a.config.layout.siblingAfter), f && u.appendChild(a.dom.document.createTextNode(" ")), a.insertDatasetFrag(u, f, r)), m = 0; (s = t.startDataset[m]); m++)
                    (d = s[a.config.data.uidKey]), (l = a.cache[d]), t.show.indexOf(l) < 0 ? (t.hide.push(l), t.toHide.push(l), t.toRemove.push(l)) : i.push(d);
                n.isEqualArray(i, o) || (t.willSort = !0), a.callActions("afterDiffDatasets", arguments);
            },
            insertDatasetFrag: function (t, e, a) {
                var i = this,
                    o = e ? n.arrayFromList(i.dom.parent.children).indexOf(e) : i.targets.length;
                for (i.dom.parent.insertBefore(t, e); a.length; ) i.targets.splice(o, 0, a.shift()), o++;
            },
            willSort: function (t, e) {
                var n = this,
                    a = !1;
                return (
                    (a =
                        !!(n.config.behavior.liveSort || "random" === t.order || t.attribute !== e.attribute || t.order !== e.order || t.collection !== e.collection || (null === t.next && e.next) || (t.next && null === e.next)) ||
                        (!(!t.next || !e.next) && n.willSort(t.next, e.next))),
                    n.callFilters("resultWillSort", a, arguments)
                );
            },
            show: function () {
                var t = this;
                return t.filter("all");
            },
            hide: function () {
                var t = this;
                return t.filter("none");
            },
            isMixing: function () {
                var t = this;
                return t.isBusy;
            },
            filter: function () {
                var t = this,
                    e = t.parseFilterArgs(arguments);
                return t.multimix({ filter: e.command }, e.animate, e.callback);
            },
            toggleOn: function () {
                var t = this,
                    e = t.parseFilterArgs(arguments),
                    n = e.command.selector,
                    a = "";
                return (t.isToggling = !0), t.toggleArray.indexOf(n) < 0 && t.toggleArray.push(n), (a = t.getToggleSelector()), t.multimix({ filter: a }, e.animate, e.callback);
            },
            toggleOff: function () {
                var t = this,
                    e = t.parseFilterArgs(arguments),
                    n = e.command.selector,
                    a = t.toggleArray.indexOf(n),
                    i = "";
                return (t.isToggling = !0), a > -1 && t.toggleArray.splice(a, 1), (i = t.getToggleSelector()), t.multimix({ filter: i }, e.animate, e.callback);
            },
            sort: function () {
                var t = this,
                    e = t.parseSortArgs(arguments);
                return t.multimix({ sort: e.command }, e.animate, e.callback);
            },
            changeLayout: function () {
                var t = this,
                    e = t.parseChangeLayoutArgs(arguments);
                return t.multimix({ changeLayout: e.command }, e.animate, e.callback);
            },
            dataset: function () {
                var t = this,
                    n = t.parseDatasetArgs(arguments),
                    a = null,
                    i = null,
                    o = !1;
                return (
                    t.callActions("beforeDataset", arguments),
                    t.isBusy
                        ? ((i = new e.QueueItem()), (i.args = arguments), (i.instruction = n), t.queueMix(i))
                        : (n.callback && (t.userCallback = n.callback), (o = n.animate ^ t.config.animation.enable ? n.animate : t.config.animation.enable), (a = t.getDataOperation(n.command.dataset)), t.goMix(o, a))
                );
            },
            multimix: function () {
                var t = this,
                    n = null,
                    a = !1,
                    i = null,
                    o = t.parseMultimixArgs(arguments);
                return (
                    t.callActions("beforeMultimix", arguments),
                    t.isBusy
                        ? ((i = new e.QueueItem()), (i.args = arguments), (i.instruction = o), (i.triggerElement = t.lastClicked), (i.isToggling = t.isToggling), t.queueMix(i))
                        : ((n = t.getOperation(o.command)),
                          t.config.controls.enable && (o.command.filter && !t.isToggling && ((t.toggleArray.length = 0), t.buildToggleArray(n.command)), t.queue.length < 1 && t.updateControls(n.command)),
                          o.callback && (t.userCallback = o.callback),
                          (a = o.animate ^ t.config.animation.enable ? o.animate : t.config.animation.enable),
                          t.callFilters("operationMultimix", n, arguments),
                          t.goMix(a, n))
                );
            },
            getOperation: function (t) {
                var a = this,
                    i = t.sort,
                    o = t.filter,
                    r = t.changeLayout,
                    s = t.remove,
                    l = t.insert,
                    c = new e.Operation();
                return (
                    (c = a.callFilters("operationUnmappedGetOperation", c, arguments)),
                    (c.id = n.randomHex()),
                    (c.command = t),
                    (c.startState = a.state),
                    (c.triggerElement = a.lastClicked),
                    a.isBusy
                        ? (a.config.debug.showWarnings && console.warn(e.messages.warningGetOperationInstanceBusy()), null)
                        : (l && a.insertTargets(l, c),
                          s && (c.toRemove = s.targets),
                          (c.startSort = c.newSort = c.startState.activeSort),
                          (c.startOrder = c.newOrder = a.targets),
                          i && ((c.startSort = c.startState.activeSort), (c.newSort = i), (c.willSort = a.willSort(i, c.startState.activeSort)), c.willSort && a.sortOperation(c)),
                          (c.startFilter = c.startState.activeFilter),
                          o ? (c.newFilter = o) : (c.newFilter = n.extend(new e.CommandFilter(), c.startFilter)),
                          "all" === c.newFilter.selector ? (c.newFilter.selector = a.config.selectors.target) : "none" === c.newFilter.selector && (c.newFilter.selector = ""),
                          a.filterOperation(c),
                          (c.startContainerClassName = c.startState.activeContainerClassName),
                          r ? ((c.newContainerClassName = r.containerClassName), c.newContainerClassName !== c.startContainerClassName && (c.willChangeLayout = !0)) : (c.newContainerClassName = c.startContainerClassName),
                          a.config.animation.enable &&
                              (a.getStartMixData(c),
                              a.setInter(c),
                              (c.docState = n.getDocumentState(a.dom.document)),
                              a.getInterMixData(c),
                              a.setFinal(c),
                              a.getFinalMixData(c),
                              a.parseEffects(),
                              (c.hasEffect = a.hasEffect()),
                              a.getTweenData(c)),
                          c.willSort && (a.targets = c.newOrder),
                          (c.newState = a.buildState(c)),
                          a.callFilters("operationMappedGetOperation", c, arguments))
                );
            },
            tween: function (t, e) {
                var n = null,
                    a = null,
                    i = -1,
                    o = -1;
                for (e = Math.min(e, 1), e = Math.max(e, 0), o = 0; (n = t.show[o]); o++) (a = t.showPosData[o]), n.applyTween(a, e);
                for (o = 0; (n = t.hide[o]); o++) n.isShown && n.hide(), (i = t.toHide.indexOf(n)) > -1 && ((a = t.toHidePosData[i]), n.isShown || n.show(), n.applyTween(a, e));
            },
            insert: function () {
                var t = this,
                    e = t.parseInsertArgs(arguments);
                return t.multimix({ insert: e.command }, e.animate, e.callback);
            },
            insertBefore: function () {
                var t = this,
                    e = t.parseInsertArgs(arguments);
                return t.insert(e.command.collection, "before", e.command.sibling, e.animate, e.callback);
            },
            insertAfter: function () {
                var t = this,
                    e = t.parseInsertArgs(arguments);
                return t.insert(e.command.collection, "after", e.command.sibling, e.animate, e.callback);
            },
            prepend: function () {
                var t = this,
                    e = t.parseInsertArgs(arguments);
                return t.insert(0, e.command.collection, e.animate, e.callback);
            },
            append: function () {
                var t = this,
                    e = t.parseInsertArgs(arguments);
                return t.insert(t.state.totalTargets, e.command.collection, e.animate, e.callback);
            },
            remove: function () {
                var t = this,
                    e = t.parseRemoveArgs(arguments);
                return t.multimix({ remove: e.command }, e.animate, e.callback);
            },
            getConfig: function (t) {
                var e = this,
                    a = null;
                return (a = t ? n.getProperty(e.config, t) : e.config), e.callFilters("valueGetConfig", a, arguments);
            },
            configure: function (t) {
                var e = this;
                e.callActions("beforeConfigure", arguments), n.extend(e.config, t, !0, !0), e.callActions("afterConfigure", arguments);
            },
            getState: function () {
                var t = this,
                    a = null;
                return (a = new e.State()), n.extend(a, t.state), n.freeze(a), t.callFilters("stateGetState", a, arguments);
            },
            forceRefresh: function () {
                var t = this;
                t.indexTargets();
            },
            forceRender: function () {
                var t = this,
                    e = null,
                    n = null,
                    a = "";
                for (a in t.cache)
                    (e = t.cache[a]), (n = e.render(e.data)), n !== e.dom.el && (e.isInDom && (e.unbindEvents(), t.dom.parent.replaceChild(n, e.dom.el)), e.isShown || (n.style.display = "none"), (e.dom.el = n), e.isInDom && e.bindEvents());
                t.state = t.buildState(t.lastOperation);
            },
            destroy: function (t) {
                var n = this,
                    a = null,
                    i = null,
                    o = 0;
                for (n.callActions("beforeDestroy", arguments), o = 0; (a = n.controls[o]); o++) a.removeBinding(n);
                for (o = 0; (i = n.targets[o]); o++) t && i.show(), i.unbindEvents();
                n.dom.container.id.match(/^MixItUp/) && n.dom.container.removeAttribute("id"), delete e.instances[n.id], n.callActions("afterDestroy", arguments);
            },
        }),
        (e.IMoveData = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.posIn = null),
                (this.posOut = null),
                (this.operation = null),
                (this.callback = null),
                (this.statusChange = ""),
                (this.duration = -1),
                (this.staggerIndex = -1),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.IMoveData),
        (e.IMoveData.prototype = Object.create(e.Base.prototype)),
        (e.IMoveData.prototype.constructor = e.IMoveData),
        (e.TargetDom = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.el = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.TargetDom),
        (e.TargetDom.prototype = Object.create(e.Base.prototype)),
        (e.TargetDom.prototype.constructor = e.TargetDom),
        (e.Target = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.id = ""),
                (this.sortString = ""),
                (this.mixer = null),
                (this.callback = null),
                (this.isShown = !1),
                (this.isBound = !1),
                (this.isExcluded = !1),
                (this.isInDom = !1),
                (this.handler = null),
                (this.operation = null),
                (this.data = null),
                (this.dom = new e.TargetDom()),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.Target),
        (e.Target.prototype = Object.create(e.Base.prototype)),
        n.extend(e.Target.prototype, {
            constructor: e.Target,
            init: function (t, n, a) {
                var i = this,
                    o = "";
                if ((i.callActions("beforeInit", arguments), (i.mixer = n), t || (t = i.render(a)), i.cacheDom(t), i.bindEvents(), "none" !== i.dom.el.style.display && (i.isShown = !0), a && n.config.data.uidKey)) {
                    if ("undefined" == typeof (o = a[n.config.data.uidKey]) || o.toString().length < 1) throw new TypeError(e.messages.errorDatasetInvalidUidKey({ uidKey: n.config.data.uidKey }));
                    (i.id = o), (i.data = a), (n.cache[o] = i);
                }
                i.callActions("afterInit", arguments);
            },
            render: function (t) {
                var a = this,
                    i = null,
                    o = null,
                    r = null,
                    s = "";
                if ((a.callActions("beforeRender", arguments), (i = a.callFilters("renderRender", a.mixer.config.render.target, arguments)), "function" != typeof i)) throw new TypeError(e.messages.errorDatasetRendererNotSet());
                return (s = i(t)), s && "object" == typeof s && n.isElement(s) ? (o = s) : "string" == typeof s && ((r = document.createElement("div")), (r.innerHTML = s), (o = r.firstElementChild)), a.callFilters("elRender", o, arguments);
            },
            cacheDom: function (t) {
                var e = this;
                e.callActions("beforeCacheDom", arguments), (e.dom.el = t), e.callActions("afterCacheDom", arguments);
            },
            getSortString: function (t) {
                var e = this,
                    n = e.dom.el.getAttribute("data-" + t) || "";
                e.callActions("beforeGetSortString", arguments), (n = isNaN(1 * n) ? n.toLowerCase() : 1 * n), (e.sortString = n), e.callActions("afterGetSortString", arguments);
            },
            show: function () {
                var t = this;
                t.callActions("beforeShow", arguments), t.isShown || ((t.dom.el.style.display = ""), (t.isShown = !0)), t.callActions("afterShow", arguments);
            },
            hide: function () {
                var t = this;
                t.callActions("beforeHide", arguments), t.isShown && ((t.dom.el.style.display = "none"), (t.isShown = !1)), t.callActions("afterHide", arguments);
            },
            move: function (t) {
                var e = this;
                e.callActions("beforeMove", arguments),
                    e.isExcluded || e.mixer.targetsMoved++,
                    e.applyStylesIn(t),
                    requestAnimationFrame(function () {
                        e.applyStylesOut(t);
                    }),
                    e.callActions("afterMove", arguments);
            },
            applyTween: function (t, n) {
                var a = this,
                    i = "",
                    o = null,
                    r = t.posIn,
                    s = [],
                    l = new e.StyleData(),
                    c = -1;
                for (a.callActions("beforeApplyTween", arguments), l.x = r.x, l.y = r.y, 0 === n ? a.hide() : a.isShown || a.show(), c = 0; (i = e.features.TWEENABLE[c]); c++)
                    if (((o = t.tweenData[i]), "x" === i)) {
                        if (!o) continue;
                        l.x = r.x + o * n;
                    } else if ("y" === i) {
                        if (!o) continue;
                        l.y = r.y + o * n;
                    } else if (o instanceof e.TransformData) {
                        if (!o.value) continue;
                        (l[i].value = r[i].value + o.value * n), (l[i].unit = o.unit), s.push(i + "(" + l[i].value + o.unit + ")");
                    } else {
                        if (!o) continue;
                        (l[i] = r[i] + o * n), (a.dom.el.style[i] = l[i]);
                    }
                (l.x || l.y) && s.unshift("translate(" + l.x + "px, " + l.y + "px)"), s.length && (a.dom.el.style[e.features.transformProp] = s.join(" ")), a.callActions("afterApplyTween", arguments);
            },
            applyStylesIn: function (t) {
                var n = this,
                    a = t.posIn,
                    i = 1 !== n.mixer.effectsIn.opacity,
                    o = [];
                n.callActions("beforeApplyStylesIn", arguments),
                    o.push("translate(" + a.x + "px, " + a.y + "px)"),
                    n.mixer.config.animation.animateResizeTargets &&
                        ("show" !== t.statusChange && ((n.dom.el.style.width = a.width + "px"), (n.dom.el.style.height = a.height + "px")),
                        (n.dom.el.style.marginRight = a.marginRight + "px"),
                        (n.dom.el.style.marginBottom = a.marginBottom + "px")),
                    i && (n.dom.el.style.opacity = a.opacity),
                    "show" === t.statusChange && (o = o.concat(n.mixer.transformIn)),
                    (n.dom.el.style[e.features.transformProp] = o.join(" ")),
                    n.callActions("afterApplyStylesIn", arguments);
            },
            applyStylesOut: function (t) {
                var n = this,
                    a = [],
                    i = [],
                    o = n.mixer.config.animation.animateResizeTargets,
                    r = "undefined" != typeof n.mixer.effectsIn.opacity;
                if (
                    (n.callActions("beforeApplyStylesOut", arguments),
                    a.push(n.writeTransitionRule(e.features.transformRule, t.staggerIndex)),
                    "none" !== t.statusChange && a.push(n.writeTransitionRule("opacity", t.staggerIndex, t.duration)),
                    o && (a.push(n.writeTransitionRule("width", t.staggerIndex, t.duration)), a.push(n.writeTransitionRule("height", t.staggerIndex, t.duration)), a.push(n.writeTransitionRule("margin", t.staggerIndex, t.duration))),
                    !t.callback)
                )
                    return n.mixer.targetsImmovable++, void (n.mixer.targetsMoved === n.mixer.targetsImmovable && n.mixer.cleanUp(t.operation));
                switch (
                    ((n.operation = t.operation),
                    (n.callback = t.callback),
                    !n.isExcluded && n.mixer.targetsBound++,
                    (n.isBound = !0),
                    n.applyTransition(a),
                    o &&
                        t.posOut.width > 0 &&
                        t.posOut.height > 0 &&
                        ((n.dom.el.style.width = t.posOut.width + "px"),
                        (n.dom.el.style.height = t.posOut.height + "px"),
                        (n.dom.el.style.marginRight = t.posOut.marginRight + "px"),
                        (n.dom.el.style.marginBottom = t.posOut.marginBottom + "px")),
                    n.mixer.config.animation.nudge || "hide" !== t.statusChange || i.push("translate(" + t.posOut.x + "px, " + t.posOut.y + "px)"),
                    t.statusChange)
                ) {
                    case "hide":
                        r && (n.dom.el.style.opacity = n.mixer.effectsOut.opacity), (i = i.concat(n.mixer.transformOut));
                        break;
                    case "show":
                        r && (n.dom.el.style.opacity = 1);
                }
                (n.mixer.config.animation.nudge || (!n.mixer.config.animation.nudge && "hide" !== t.statusChange)) && i.push("translate(" + t.posOut.x + "px, " + t.posOut.y + "px)"),
                    (n.dom.el.style[e.features.transformProp] = i.join(" ")),
                    n.callActions("afterApplyStylesOut", arguments);
            },
            writeTransitionRule: function (t, e, n) {
                var a = this,
                    i = a.getDelay(e),
                    o = "";
                return (o = t + " " + (n > 0 ? n : a.mixer.config.animation.duration) + "ms " + i + "ms " + ("opacity" === t ? "linear" : a.mixer.config.animation.easing)), a.callFilters("ruleWriteTransitionRule", o, arguments);
            },
            getDelay: function (t) {
                var e = this,
                    n = -1;
                return (
                    "function" == typeof e.mixer.config.animation.staggerSequence && (t = e.mixer.config.animation.staggerSequence.call(e, t, e.state)),
                    (n = e.mixer.staggerDuration ? t * e.mixer.staggerDuration : 0),
                    e.callFilters("delayGetDelay", n, arguments)
                );
            },
            applyTransition: function (t) {
                var n = this,
                    a = t.join(", ");
                n.callActions("beforeApplyTransition", arguments), (n.dom.el.style[e.features.transitionProp] = a), n.callActions("afterApplyTransition", arguments);
            },
            handleTransitionEnd: function (t) {
                var e = this,
                    n = t.propertyName,
                    a = e.mixer.config.animation.animateResizeTargets;
                e.callActions("beforeHandleTransitionEnd", arguments),
                    e.isBound &&
                        t.target.matches(e.mixer.config.selectors.target) &&
                        (n.indexOf("transform") > -1 || n.indexOf("opacity") > -1 || (a && n.indexOf("height") > -1) || (a && n.indexOf("width") > -1) || (a && n.indexOf("margin") > -1)) &&
                        (e.callback.call(e, e.operation), (e.isBound = !1), (e.callback = null), (e.operation = null)),
                    e.callActions("afterHandleTransitionEnd", arguments);
            },
            eventBus: function (t) {
                var e = this;
                switch ((e.callActions("beforeEventBus", arguments), t.type)) {
                    case "webkitTransitionEnd":
                    case "transitionend":
                        e.handleTransitionEnd(t);
                }
                e.callActions("afterEventBus", arguments);
            },
            unbindEvents: function () {
                var t = this;
                t.callActions("beforeUnbindEvents", arguments), n.off(t.dom.el, "webkitTransitionEnd", t.handler), n.off(t.dom.el, "transitionend", t.handler), t.callActions("afterUnbindEvents", arguments);
            },
            bindEvents: function () {
                var t = this,
                    a = "";
                t.callActions("beforeBindEvents", arguments),
                    (a = "webkit" === e.features.transitionPrefix ? "webkitTransitionEnd" : "transitionend"),
                    (t.handler = function (e) {
                        return t.eventBus(e);
                    }),
                    n.on(t.dom.el, a, t.handler),
                    t.callActions("afterBindEvents", arguments);
            },
            getPosData: function (n) {
                var a = this,
                    i = {},
                    o = null,
                    r = new e.StyleData();
                return (
                    a.callActions("beforeGetPosData", arguments),
                    (r.x = a.dom.el.offsetLeft),
                    (r.y = a.dom.el.offsetTop),
                    (a.mixer.config.animation.animateResizeTargets || n) &&
                        ((o = a.dom.el.getBoundingClientRect()), (r.top = o.top), (r.right = o.right), (r.bottom = o.bottom), (r.left = o.left), (r.width = o.width), (r.height = o.height)),
                    a.mixer.config.animation.animateResizeTargets && ((i = t.getComputedStyle(a.dom.el)), (r.marginBottom = parseFloat(i.marginBottom)), (r.marginRight = parseFloat(i.marginRight))),
                    a.callFilters("posDataGetPosData", r, arguments)
                );
            },
            cleanUp: function () {
                var t = this;
                t.callActions("beforeCleanUp", arguments),
                    (t.dom.el.style[e.features.transformProp] = ""),
                    (t.dom.el.style[e.features.transitionProp] = ""),
                    (t.dom.el.style.opacity = ""),
                    t.mixer.config.animation.animateResizeTargets && ((t.dom.el.style.width = ""), (t.dom.el.style.height = ""), (t.dom.el.style.marginRight = ""), (t.dom.el.style.marginBottom = "")),
                    t.callActions("afterCleanUp", arguments);
            },
        }),
        (e.Collection = function (t) {
            var e = null,
                a = -1;
            for (this.callActions("beforeConstruct"), a = 0; (e = t[a]); a++) this[a] = e;
            (this.length = t.length), this.callActions("afterConstruct"), n.freeze(this);
        }),
        e.BaseStatic.call(e.Collection),
        (e.Collection.prototype = Object.create(e.Base.prototype)),
        n.extend(e.Collection.prototype, {
            constructor: e.Collection,
            mixitup: function (t) {
                var a = this,
                    i = null,
                    o = Array.prototype.slice.call(arguments),
                    r = [],
                    s = -1;
                for (this.callActions("beforeMixitup"), o.shift(), s = 0; (i = a[s]); s++) r.push(i[t].apply(i, o));
                return a.callFilters("promiseMixitup", n.all(r, e.libraries), arguments);
            },
        }),
        (e.Operation = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.id = ""),
                (this.args = []),
                (this.command = null),
                (this.showPosData = []),
                (this.toHidePosData = []),
                (this.startState = null),
                (this.newState = null),
                (this.docState = null),
                (this.willSort = !1),
                (this.willChangeLayout = !1),
                (this.hasEffect = !1),
                (this.hasFailed = !1),
                (this.triggerElement = null),
                (this.show = []),
                (this.hide = []),
                (this.matching = []),
                (this.toShow = []),
                (this.toHide = []),
                (this.toMove = []),
                (this.toRemove = []),
                (this.startOrder = []),
                (this.newOrder = []),
                (this.startSort = null),
                (this.newSort = null),
                (this.startFilter = null),
                (this.newFilter = null),
                (this.startDataset = null),
                (this.newDataset = null),
                (this.viewportDeltaX = 0),
                (this.viewportDeltaY = 0),
                (this.startX = 0),
                (this.startY = 0),
                (this.startHeight = 0),
                (this.startWidth = 0),
                (this.newX = 0),
                (this.newY = 0),
                (this.newHeight = 0),
                (this.newWidth = 0),
                (this.startContainerClassName = ""),
                (this.startDisplay = ""),
                (this.newContainerClassName = ""),
                (this.newDisplay = ""),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.Operation),
        (e.Operation.prototype = Object.create(e.Base.prototype)),
        (e.Operation.prototype.constructor = e.Operation),
        (e.State = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.id = ""),
                (this.activeFilter = null),
                (this.activeSort = null),
                (this.activeContainerClassName = ""),
                (this.container = null),
                (this.targets = []),
                (this.hide = []),
                (this.show = []),
                (this.matching = []),
                (this.totalTargets = -1),
                (this.totalShow = -1),
                (this.totalHide = -1),
                (this.totalMatching = -1),
                (this.hasFailed = !1),
                (this.triggerElement = null),
                (this.activeDataset = null),
                this.callActions("afterConstruct"),
                n.seal(this);
        }),
        e.BaseStatic.call(e.State),
        (e.State.prototype = Object.create(e.Base.prototype)),
        (e.State.prototype.constructor = e.State),
        (e.UserInstruction = function () {
            e.Base.call(this), this.callActions("beforeConstruct"), (this.command = {}), (this.animate = !1), (this.callback = null), this.callActions("afterConstruct"), n.seal(this);
        }),
        e.BaseStatic.call(e.UserInstruction),
        (e.UserInstruction.prototype = Object.create(e.Base.prototype)),
        (e.UserInstruction.prototype.constructor = e.UserInstruction),
        (e.Messages = function () {
            e.Base.call(this),
                this.callActions("beforeConstruct"),
                (this.ERROR_FACTORY_INVALID_CONTAINER = "[MixItUp] An invalid selector or element reference was passed to the mixitup factory function"),
                (this.ERROR_FACTORY_CONTAINER_NOT_FOUND = "[MixItUp] The provided selector yielded no container element"),
                (this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS = "[MixItUp] Invalid value for `animation.effects`"),
                (this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE = "[MixItUp] Invalid value for `controls.scope`"),
                (this.ERROR_CONFIG_INVALID_PROPERTY = '[MixitUp] Invalid configuration object property "${erroneous}"${suggestion}'),
                (this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION = '. Did you mean "${probableMatch}"?'),
                (this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET = "[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`"),
                (this.ERROR_DATASET_INVALID_UID_KEY = '[MixItUp] The specified UID key "${uidKey}" is not present on one or more dataset items'),
                (this.ERROR_DATASET_DUPLICATE_UID = '[MixItUp] The UID "${uid}" was found on two or more dataset items. UIDs must be unique.'),
                (this.ERROR_INSERT_INVALID_ARGUMENTS = "[MixItUp] Please provider either an index or a sibling and position to insert, not both"),
                (this.ERROR_INSERT_PREEXISTING_ELEMENT = "[MixItUp] An element to be inserted already exists in the container"),
                (this.ERROR_FILTER_INVALID_ARGUMENTS = "[MixItUp] Please provide either a selector or collection `.filter()`, not both"),
                (this.ERROR_DATASET_NOT_SET = "[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`"),
                (this.ERROR_DATASET_PRERENDERED_MISMATCH = "[MixItUp] `load.dataset` does not match pre-rendered targets"),
                (this.ERROR_DATASET_RENDERER_NOT_SET = "[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`"),
                (this.ERROR_SORT_NON_EXISTENT_ELEMENT = "[MixItUp] An element to be sorted does not already exist in the container"),
                (this.WARNING_FACTORY_PREEXISTING_INSTANCE =
                    "[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored. If you wish to perform additional methods on this instance, please create a reference."),
                (this.WARNING_INSERT_NO_ELEMENTS = "[MixItUp] WARNING: No valid elements were passed to `.insert()`"),
                (this.WARNING_REMOVE_NO_ELEMENTS = "[MixItUp] WARNING: No valid elements were passed to `.remove()`"),
                (this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL = "[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the queue is full or queuing is disabled."),
                (this.WARNING_GET_OPERATION_INSTANCE_BUSY = "[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy."),
                (this.WARNING_NO_PROMISE_IMPLEMENTATION = "[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install an ES6 Promise polyfill."),
                (this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES = '[MixItUp] WARNING: The requested sorting data attribute "${attribute}" was not present on one or more target elements which may product unexpected sort output'),
                this.callActions("afterConstruct"),
                this.compileTemplates(),
                n.seal(this);
        }),
        e.BaseStatic.call(e.Messages),
        (e.Messages.prototype = Object.create(e.Base.prototype)),
        (e.Messages.prototype.constructor = e.Messages),
        (e.Messages.prototype.compileTemplates = function () {
            var t = "",
                e = "";
            for (t in this) "string" == typeof (e = this[t]) && (this[n.camelCase(t)] = n.template(e));
        }),
        (e.messages = new e.Messages()),
        (e.Facade = function (t) {
            e.Base.call(this),
                this.callActions("beforeConstruct", arguments),
                (this.configure = t.configure.bind(t)),
                (this.show = t.show.bind(t)),
                (this.hide = t.hide.bind(t)),
                (this.filter = t.filter.bind(t)),
                (this.toggleOn = t.toggleOn.bind(t)),
                (this.toggleOff = t.toggleOff.bind(t)),
                (this.sort = t.sort.bind(t)),
                (this.changeLayout = t.changeLayout.bind(t)),
                (this.multimix = t.multimix.bind(t)),
                (this.dataset = t.dataset.bind(t)),
                (this.tween = t.tween.bind(t)),
                (this.insert = t.insert.bind(t)),
                (this.insertBefore = t.insertBefore.bind(t)),
                (this.insertAfter = t.insertAfter.bind(t)),
                (this.prepend = t.prepend.bind(t)),
                (this.append = t.append.bind(t)),
                (this.remove = t.remove.bind(t)),
                (this.destroy = t.destroy.bind(t)),
                (this.forceRefresh = t.forceRefresh.bind(t)),
                (this.forceRender = t.forceRender.bind(t)),
                (this.isMixing = t.isMixing.bind(t)),
                (this.getOperation = t.getOperation.bind(t)),
                (this.getConfig = t.getConfig.bind(t)),
                (this.getState = t.getState.bind(t)),
                this.callActions("afterConstruct", arguments),
                n.freeze(this),
                n.seal(this);
        }),
        e.BaseStatic.call(e.Facade),
        (e.Facade.prototype = Object.create(e.Base.prototype)),
        (e.Facade.prototype.constructor = e.Facade),
        "object" == typeof exports && "object" == typeof module
            ? (module.exports = e)
            : "function" == typeof define && define.amd
            ? define(function () {
                  return e;
              })
            : ("undefined" != typeof t.mixitup && "function" == typeof t.mixitup) || (t.mixitup = e),
        e.BaseStatic.call(e.constructor),
        (e.NAME = "mixitup"),
        (e.CORE_VERSION = "3.3.1");
})(window);