! function (t, e) {
    "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self).window = t.window || {})
}(this, (function (t) {
    "use strict";
    const e = (t, e = 1e4) => (t = parseFloat(t + "") || 0, Math.round((t + Number.EPSILON) * e) / e),
        i = function (t) {
            if (!(t && t instanceof Element && t.offsetParent)) return !1;
            const e = t.scrollHeight > t.clientHeight,
                i = window.getComputedStyle(t).overflowY,
                n = -1 !== i.indexOf("hidden"),
                s = -1 !== i.indexOf("visible");
            return e && !n && !s
        },
        n = function (t, e = void 0) {
            return !(!t || t === document.body || e && t === e) && (i(t) ? t : n(t.parentElement, e))
        },
        s = function (t) {
            var e = (new DOMParser).parseFromString(t, "text/html").body;
            if (e.childElementCount > 1) {
                for (var i = document.createElement("div"); e.firstChild;) i.appendChild(e.firstChild);
                return i
            }
            return e.firstChild
        },
        o = t => `${t || ""}`.split(" ").filter((t => !!t)),
        a = (t, e, i) => {
            t && o(e).forEach((e => {
                t.classList.toggle(e, i || !1)
            }))
        };
    class r {
        constructor(t) {
            Object.defineProperty(this, "pageX", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "pageY", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "clientX", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "clientY", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "id", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "time", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "nativePointer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), this.nativePointer = t, this.pageX = t.pageX, this.pageY = t.pageY, this.clientX = t.clientX, this.clientY = t.clientY, this.id = self.Touch && t instanceof Touch ? t.identifier : -1, this.time = Date.now()
        }
    }
    const l = {
        passive: !1
    };
    class c {
        constructor(t, {
            start: e = (() => !0),
            move: i = (() => { }),
            end: n = (() => { })
        }) {
            Object.defineProperty(this, "element", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "startCallback", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "moveCallback", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "endCallback", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "currentPointers", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: []
            }), Object.defineProperty(this, "startPointers", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: []
            }), this.element = t, this.startCallback = e, this.moveCallback = i, this.endCallback = n;
            for (const t of ["onPointerStart", "onTouchStart", "onMove", "onTouchEnd", "onPointerEnd", "onWindowBlur"]) this[t] = this[t].bind(this);
            this.element.addEventListener("mousedown", this.onPointerStart, l), this.element.addEventListener("touchstart", this.onTouchStart, l), this.element.addEventListener("touchmove", this.onMove, l), this.element.addEventListener("touchend", this.onTouchEnd), this.element.addEventListener("touchcancel", this.onTouchEnd)
        }
        onPointerStart(t) {
            if (!t.buttons || 0 !== t.button) return;
            const e = new r(t);
            this.currentPointers.some((t => t.id === e.id)) || this.triggerPointerStart(e, t) && (window.addEventListener("mousemove", this.onMove), window.addEventListener("mouseup", this.onPointerEnd), window.addEventListener("blur", this.onWindowBlur))
        }
        onTouchStart(t) {
            for (const e of Array.from(t.changedTouches || [])) this.triggerPointerStart(new r(e), t);
            window.addEventListener("blur", this.onWindowBlur)
        }
        onMove(t) {
            const e = this.currentPointers.slice(),
                i = "changedTouches" in t ? Array.from(t.changedTouches || []).map((t => new r(t))) : [new r(t)],
                n = [];
            for (const t of i) {
                const e = this.currentPointers.findIndex((e => e.id === t.id));
                e < 0 || (n.push(t), this.currentPointers[e] = t)
            }
            n.length && this.moveCallback(t, this.currentPointers.slice(), e)
        }
        onPointerEnd(t) {
            t.buttons > 0 && 0 !== t.button || (this.triggerPointerEnd(t, new r(t)), window.removeEventListener("mousemove", this.onMove), window.removeEventListener("mouseup", this.onPointerEnd), window.removeEventListener("blur", this.onWindowBlur))
        }
        onTouchEnd(t) {
            for (const e of Array.from(t.changedTouches || [])) this.triggerPointerEnd(t, new r(e))
        }
        triggerPointerStart(t, e) {
            return !!this.startCallback(e, t, this.currentPointers.slice()) && (this.currentPointers.push(t), this.startPointers.push(t), !0)
        }
        triggerPointerEnd(t, e) {
            const i = this.currentPointers.findIndex((t => t.id === e.id));
            i < 0 || (this.currentPointers.splice(i, 1), this.startPointers.splice(i, 1), this.endCallback(t, e, this.currentPointers.slice()))
        }
        onWindowBlur() {
            this.clear()
        }
        clear() {
            for (; this.currentPointers.length;) {
                const t = this.currentPointers[this.currentPointers.length - 1];
                this.currentPointers.splice(this.currentPointers.length - 1, 1), this.startPointers.splice(this.currentPointers.length - 1, 1), this.endCallback(new Event("touchend", {
                    bubbles: !0,
                    cancelable: !0,
                    clientX: t.clientX,
                    clientY: t.clientY
                }), t, this.currentPointers.slice())
            }
        }
        stop() {
            this.element.removeEventListener("mousedown", this.onPointerStart, l), this.element.removeEventListener("touchstart", this.onTouchStart, l), this.element.removeEventListener("touchmove", this.onMove, l), this.element.removeEventListener("touchend", this.onTouchEnd), this.element.removeEventListener("touchcancel", this.onTouchEnd), window.removeEventListener("mousemove", this.onMove), window.removeEventListener("mouseup", this.onPointerEnd), window.removeEventListener("blur", this.onWindowBlur)
        }
    }

    function h(t, e) {
        return e ? Math.sqrt(Math.pow(e.clientX - t.clientX, 2) + Math.pow(e.clientY - t.clientY, 2)) : 0
    }

    function d(t, e) {
        return e ? {
            clientX: (t.clientX + e.clientX) / 2,
            clientY: (t.clientY + e.clientY) / 2
        } : t
    }
    const u = t => "object" == typeof t && null !== t && t.constructor === Object && "[object Object]" === Object.prototype.toString.call(t),
        f = (t, ...e) => {
            const i = e.length;
            for (let n = 0; n < i; n++) {
                const i = e[n] || {};
                Object.entries(i).forEach((([e, i]) => {
                    const n = Array.isArray(i) ? [] : {};
                    t[e] || Object.assign(t, {
                        [e]: n
                    }), u(i) ? Object.assign(t[e], f(n, i)) : Array.isArray(i) ? Object.assign(t, {
                        [e]: [...i]
                    }) : Object.assign(t, {
                        [e]: i
                    })
                }))
            }
            return t
        },
        p = function (t, e) {
            return t.split(".").reduce(((t, e) => "object" == typeof t ? t[e] : void 0), e)
        };
    class g {
        constructor(t = {}) {
            Object.defineProperty(this, "options", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: t
            }), Object.defineProperty(this, "events", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: new Map
            }), this.setOptions(t);
            for (const t of Object.getOwnPropertyNames(Object.getPrototypeOf(this))) t.startsWith("on") && "function" == typeof this[t] && (this[t] = this[t].bind(this))
        }
        setOptions(t) {
            this.options = t ? f({}, this.constructor.defaults, t) : {};
            for (const [t, e] of Object.entries(this.option("on") || {})) this.on(t, e)
        }
        option(t, ...e) {
            let i = p(t, this.options);
            return i && "function" == typeof i && (i = i.call(this, this, ...e)), i
        }
        optionFor(t, e, i, ...n) {
            let s = p(e, t);
            var o;
            "string" != typeof (o = s) || isNaN(o) || isNaN(parseFloat(o)) || (s = parseFloat(s)), "true" === s && (s = !0), "false" === s && (s = !1), s && "function" == typeof s && (s = s.call(this, this, t, ...n));
            let a = p(e, this.options);
            return a && "function" == typeof a ? s = a.call(this, this, t, ...n, s) : void 0 === s && (s = a), void 0 === s ? i : s
        }
        cn(t) {
            const e = this.options.classes;
            return e && e[t] || ""
        }
        localize(t, e = []) {
            t = String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g, ((t, e, i) => {
                let n = "";
                return i ? n = this.option(`${e[0] + e.toLowerCase().substring(1)}.l10n.${i}`) : e && (n = this.option(`l10n.${e}`)), n || (n = t), n
            }));
            for (let i = 0; i < e.length; i++) t = t.split(e[i][0]).join(e[i][1]);
            return t = t.replace(/\{\{(.*?)\}\}/g, ((t, e) => e))
        }
        on(t, e) {
            let i = [];
            "string" == typeof t ? i = t.split(" ") : Array.isArray(t) && (i = t), this.events || (this.events = new Map), i.forEach((t => {
                let i = this.events.get(t);
                i || (this.events.set(t, []), i = []), i.includes(e) || i.push(e), this.events.set(t, i)
            }))
        }
        off(t, e) {
            let i = [];
            "string" == typeof t ? i = t.split(" ") : Array.isArray(t) && (i = t), i.forEach((t => {
                const i = this.events.get(t);
                if (Array.isArray(i)) {
                    const t = i.indexOf(e);
                    t > -1 && i.splice(t, 1)
                }
            }))
        }
        emit(t, ...e) {
            [...this.events.get(t) || []].forEach((t => t(this, ...e))), "*" !== t && this.emit("*", t, ...e)
        }
    }
    Object.defineProperty(g, "version", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: "5.0.31"
    }), Object.defineProperty(g, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {}
    });
    class m extends g {
        constructor(t = {}) {
            super(t), Object.defineProperty(this, "plugins", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {}
            })
        }
        attachPlugins(t = {}) {
            const e = new Map;
            for (const [i, n] of Object.entries(t)) {
                const t = this.option(i),
                    s = this.plugins[i];
                s || !1 === t ? s && !1 === t && (s.detach(), delete this.plugins[i]) : e.set(i, new n(this, t || {}))
            }
            for (const [t, i] of e) this.plugins[t] = i, i.attach()
        }
        detachPlugins(t) {
            t = t || Object.keys(this.plugins);
            for (const e of t) {
                const t = this.plugins[e];
                t && t.detach(), delete this.plugins[e]
            }
            return this.emit("detachPlugins"), this
        }
    }
    var b;
    ! function (t) {
        t[t.Init = 0] = "Init", t[t.Error = 1] = "Error", t[t.Ready = 2] = "Ready", t[t.Panning = 3] = "Panning", t[t.Mousemove = 4] = "Mousemove", t[t.Destroy = 5] = "Destroy"
    }(b || (b = {}));
    const v = ["a", "b", "c", "d", "e", "f"],
        y = {
            PANUP: "Move up",
            PANDOWN: "Move down",
            PANLEFT: "Move left",
            PANRIGHT: "Move right",
            ZOOMIN: "Zoom in",
            ZOOMOUT: "Zoom out",
            TOGGLEZOOM: "Toggle zoom level",
            TOGGLE1TO1: "Toggle zoom level",
            ITERATEZOOM: "Toggle zoom level",
            ROTATECCW: "Rotate counterclockwise",
            ROTATECW: "Rotate clockwise",
            FLIPX: "Flip horizontally",
            FLIPY: "Flip vertically",
            FITX: "Fit horizontally",
            FITY: "Fit vertically",
            RESET: "Reset",
            TOGGLEFS: "Toggle fullscreen"
        },
        w = {
            content: null,
            width: "auto",
            height: "auto",
            panMode: "drag",
            touch: !0,
            dragMinThreshold: 3,
            lockAxis: !1,
            mouseMoveFactor: 1,
            mouseMoveFriction: .12,
            zoom: !0,
            pinchToZoom: !0,
            panOnlyZoomed: "auto",
            minScale: 1,
            maxScale: 2,
            friction: .25,
            dragFriction: .35,
            decelFriction: .05,
            click: "toggleZoom",
            dblClick: !1,
            wheel: "zoom",
            wheelLimit: 7,
            spinner: !0,
            bounds: "auto",
            infinite: !1,
            rubberband: !0,
            bounce: !0,
            maxVelocity: 75,
            transformParent: !1,
            classes: {
                content: "f-panzoom__content",
                isLoading: "is-loading",
                canZoomIn: "can-zoom_in",
                canZoomOut: "can-zoom_out",
                isDraggable: "is-draggable",
                isDragging: "is-dragging",
                inFullscreen: "in-fullscreen",
                htmlHasFullscreen: "with-panzoom-in-fullscreen"
            },
            l10n: y
        },
        x = '<circle cx="25" cy="25" r="20"></circle>',
        E = '<div class="f-spinner"><svg viewBox="0 0 50 50">' + x + x + "</svg></div>",
        S = t => t && null !== t && t instanceof Element && "nodeType" in t,
        P = (t, e) => {
            t && o(e).forEach((e => {
                t.classList.remove(e)
            }))
        },
        C = (t, e) => {
            t && o(e).forEach((e => {
                t.classList.add(e)
            }))
        },
        T = {
            a: 1,
            b: 0,
            c: 0,
            d: 1,
            e: 0,
            f: 0
        },
        M = 1e5,
        O = 1e4,
        A = "mousemove",
        L = "drag",
        z = "content";
    let R = null,
        k = null;
    class I extends m {
        get fits() {
            return this.contentRect.width - this.contentRect.fitWidth < 1 && this.contentRect.height - this.contentRect.fitHeight < 1
        }
        get isTouchDevice() {
            return null === k && (k = window.matchMedia("(hover: none)").matches), k
        }
        get isMobile() {
            return null === R && (R = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent)), R
        }
        get panMode() {
            return this.options.panMode !== A || this.isTouchDevice ? L : A
        }
        get panOnlyZoomed() {
            const t = this.options.panOnlyZoomed;
            return "auto" === t ? this.isTouchDevice : t
        }
        get isInfinite() {
            return this.option("infinite")
        }
        get angle() {
            return 180 * Math.atan2(this.current.b, this.current.a) / Math.PI || 0
        }
        get targetAngle() {
            return 180 * Math.atan2(this.target.b, this.target.a) / Math.PI || 0
        }
        get scale() {
            const {
                a: t,
                b: e
            } = this.current;
            return Math.sqrt(t * t + e * e) || 1
        }
        get targetScale() {
            const {
                a: t,
                b: e
            } = this.target;
            return Math.sqrt(t * t + e * e) || 1
        }
        get minScale() {
            return this.option("minScale") || 1
        }
        get fullScale() {
            const {
                contentRect: t
            } = this;
            return t.fullWidth / t.fitWidth || 1
        }
        get maxScale() {
            return this.fullScale * (this.option("maxScale") || 1) || 1
        }
        get coverScale() {
            const {
                containerRect: t,
                contentRect: e
            } = this, i = Math.max(t.height / e.fitHeight, t.width / e.fitWidth) || 1;
            return Math.min(this.fullScale, i)
        }
        get isScaling() {
            return Math.abs(this.targetScale - this.scale) > 1e-5 && !this.isResting
        }
        get isContentLoading() {
            const t = this.content;
            return !!(t && t instanceof HTMLImageElement) && !t.complete
        }
        get isResting() {
            if (this.isBouncingX || this.isBouncingY) return !1;
            for (const t of v) {
                const e = "e" == t || "f" === t ? 1e-4 : 1e-5;
                if (Math.abs(this.target[t] - this.current[t]) > e) return !1
            }
            return !(!this.ignoreBounds && !this.checkBounds().inBounds)
        }
        constructor(t, e = {}, i = {}) {
            var n;
            if (super(e), Object.defineProperty(this, "pointerTracker", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "resizeObserver", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "updateTimer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "clickTimer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "rAF", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "isTicking", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "ignoreBounds", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "isBouncingX", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "isBouncingY", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "clicks", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "trackingPoints", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: []
            }), Object.defineProperty(this, "pwt", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "cwd", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "pmme", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "friction", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "state", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: b.Init
            }), Object.defineProperty(this, "isDragging", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "container", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "content", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "spinner", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "containerRect", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {
                    width: 0,
                    height: 0,
                    innerWidth: 0,
                    innerHeight: 0
                }
            }), Object.defineProperty(this, "contentRect", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {
                    top: 0,
                    right: 0,
                    bottom: 0,
                    left: 0,
                    fullWidth: 0,
                    fullHeight: 0,
                    fitWidth: 0,
                    fitHeight: 0,
                    width: 0,
                    height: 0
                }
            }), Object.defineProperty(this, "dragStart", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {
                    x: 0,
                    y: 0,
                    top: 0,
                    left: 0,
                    time: 0
                }
            }), Object.defineProperty(this, "dragOffset", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {
                    x: 0,
                    y: 0,
                    time: 0
                }
            }), Object.defineProperty(this, "current", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: Object.assign({}, T)
            }), Object.defineProperty(this, "target", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: Object.assign({}, T)
            }), Object.defineProperty(this, "velocity", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {
                    a: 0,
                    b: 0,
                    c: 0,
                    d: 0,
                    e: 0,
                    f: 0
                }
            }), Object.defineProperty(this, "lockedAxis", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), !t) throw new Error("Container Element Not Found");
            this.container = t, this.initContent(), this.attachPlugins(Object.assign(Object.assign({}, I.Plugins), i)), this.emit("attachPlugins"), this.emit("init");
            const o = this.content;
            if (o.addEventListener("load", this.onLoad), o.addEventListener("error", this.onError), this.isContentLoading) {
                if (this.option("spinner")) {
                    t.classList.add(this.cn("isLoading"));
                    const e = s(E);
                    !t.contains(o) || o.parentElement instanceof HTMLPictureElement ? this.spinner = t.appendChild(e) : this.spinner = (null === (n = o.parentElement) || void 0 === n ? void 0 : n.insertBefore(e, o)) || null
                }
                this.emit("beforeLoad")
            } else queueMicrotask((() => {
                this.enable()
            }))
        }
        initContent() {
            const {
                container: t
            } = this, e = this.cn(z);
            let i = this.option(z) || t.querySelector(`.${e}`);
            if (i || (i = t.querySelector("img,picture") || t.firstElementChild, i && C(i, e)), i instanceof HTMLPictureElement && (i = i.querySelector("img")), !i) throw new Error("No content found");
            this.content = i
        }
        onLoad() {
            const {
                spinner: t,
                container: e,
                state: i
            } = this;
            t && (t.remove(), this.spinner = null), this.option("spinner") && e.classList.remove(this.cn("isLoading")), this.emit("afterLoad"), i === b.Init ? this.enable() : this.updateMetrics()
        }
        onError() {
            this.state !== b.Destroy && (this.spinner && (this.spinner.remove(), this.spinner = null), this.stop(), this.detachEvents(), this.state = b.Error, this.emit("error"))
        }
        attachObserver() {
            var t;
            const e = () => {
                const {
                    container: t,
                    containerRect: e
                } = this;
                return Math.abs(e.width - t.getBoundingClientRect().width) > .1 || Math.abs(e.height - t.getBoundingClientRect().height) > .1
            };
            this.resizeObserver || void 0 === window.ResizeObserver || (this.resizeObserver = new ResizeObserver((() => {
                this.updateTimer || (e() ? (this.onResize(), this.isMobile && (this.updateTimer = setTimeout((() => {
                    e() && this.onResize(), this.updateTimer = null
                }), 500))) : this.updateTimer && (clearTimeout(this.updateTimer), this.updateTimer = null))
            }))), null === (t = this.resizeObserver) || void 0 === t || t.observe(this.container)
        }
        detachObserver() {
            var t;
            null === (t = this.resizeObserver) || void 0 === t || t.disconnect()
        }
        attachEvents() {
            const {
                container: t
            } = this;
            t.addEventListener("click", this.onClick, {
                passive: !1,
                capture: !1
            }), t.addEventListener("wheel", this.onWheel, {
                passive: !1
            }), this.pointerTracker = new c(t, {
                start: this.onPointerDown,
                move: this.onPointerMove,
                end: this.onPointerUp
            }), document.addEventListener(A, this.onMouseMove)
        }
        detachEvents() {
            var t;
            const {
                container: e
            } = this;
            e.removeEventListener("click", this.onClick, {
                passive: !1,
                capture: !1
            }), e.removeEventListener("wheel", this.onWheel, {
                passive: !1
            }), null === (t = this.pointerTracker) || void 0 === t || t.stop(), this.pointerTracker = null, document.removeEventListener(A, this.onMouseMove), document.removeEventListener("keydown", this.onKeydown, !0), this.clickTimer && (clearTimeout(this.clickTimer), this.clickTimer = null), this.updateTimer && (clearTimeout(this.updateTimer), this.updateTimer = null)
        }
        animate() {
            this.setTargetForce();
            const t = this.friction,
                e = this.option("maxVelocity");
            for (const i of v) t ? (this.velocity[i] *= 1 - t, e && !this.isScaling && (this.velocity[i] = Math.max(Math.min(this.velocity[i], e), -1 * e)), this.current[i] += this.velocity[i]) : this.current[i] = this.target[i];
            this.setTransform(), this.setEdgeForce(), !this.isResting || this.isDragging ? this.rAF = requestAnimationFrame((() => this.animate())) : this.stop("current")
        }
        setTargetForce() {
            for (const t of v) "e" === t && this.isBouncingX || "f" === t && this.isBouncingY || (this.velocity[t] = (1 / (1 - this.friction) - 1) * (this.target[t] - this.current[t]))
        }
        checkBounds(t = 0, e = 0) {
            const {
                current: i
            } = this, n = i.e + t, s = i.f + e, o = this.getBounds(), {
                x: a,
                y: r
            } = o, l = a.min, c = a.max, h = r.min, d = r.max;
            let u = 0,
                f = 0;
            return l !== 1 / 0 && n < l ? u = l - n : c !== 1 / 0 && n > c && (u = c - n), h !== 1 / 0 && s < h ? f = h - s : d !== 1 / 0 && s > d && (f = d - s), Math.abs(u) < 1e-4 && (u = 0), Math.abs(f) < 1e-4 && (f = 0), Object.assign(Object.assign({}, o), {
                xDiff: u,
                yDiff: f,
                inBounds: !u && !f
            })
        }
        clampTargetBounds() {
            const {
                target: t
            } = this, {
                x: e,
                y: i
            } = this.getBounds();
            e.min !== 1 / 0 && (t.e = Math.max(t.e, e.min)), e.max !== 1 / 0 && (t.e = Math.min(t.e, e.max)), i.min !== 1 / 0 && (t.f = Math.max(t.f, i.min)), i.max !== 1 / 0 && (t.f = Math.min(t.f, i.max))
        }
        calculateContentDim(t = this.current) {
            const {
                content: e,
                contentRect: i
            } = this, {
                fitWidth: n,
                fitHeight: s,
                fullWidth: o,
                fullHeight: a
            } = i;
            let r = o,
                l = a;
            if (this.option("zoom") || 0 !== this.angle) {
                const i = !(e instanceof HTMLImageElement) && ("none" === window.getComputedStyle(e).maxWidth || "none" === window.getComputedStyle(e).maxHeight),
                    c = i ? o : n,
                    h = i ? a : s,
                    d = this.getMatrix(t),
                    u = new DOMPoint(0, 0).matrixTransform(d),
                    f = new DOMPoint(0 + c, 0).matrixTransform(d),
                    p = new DOMPoint(0 + c, 0 + h).matrixTransform(d),
                    g = new DOMPoint(0, 0 + h).matrixTransform(d),
                    m = Math.abs(p.x - u.x),
                    b = Math.abs(p.y - u.y),
                    v = Math.abs(g.x - f.x),
                    y = Math.abs(g.y - f.y);
                r = Math.max(m, v), l = Math.max(b, y)
            }
            return {
                contentWidth: r,
                contentHeight: l
            }
        }
        setEdgeForce() {
            if (this.ignoreBounds || this.isDragging || this.panMode === A || this.targetScale < this.scale) return this.isBouncingX = !1, void (this.isBouncingY = !1);
            const {
                target: t
            } = this, {
                x: e,
                y: i,
                xDiff: n,
                yDiff: s
            } = this.checkBounds();
            const o = this.option("maxVelocity");
            let a = this.velocity.e,
                r = this.velocity.f;
            0 !== n ? (this.isBouncingX = !0, n * a <= 0 ? a += .14 * n : (a = .14 * n, e.min !== 1 / 0 && (this.target.e = Math.max(t.e, e.min)), e.max !== 1 / 0 && (this.target.e = Math.min(t.e, e.max))), o && (a = Math.max(Math.min(a, o), -1 * o))) : this.isBouncingX = !1, 0 !== s ? (this.isBouncingY = !0, s * r <= 0 ? r += .14 * s : (r = .14 * s, i.min !== 1 / 0 && (this.target.f = Math.max(t.f, i.min)), i.max !== 1 / 0 && (this.target.f = Math.min(t.f, i.max))), o && (r = Math.max(Math.min(r, o), -1 * o))) : this.isBouncingY = !1, this.isBouncingX && (this.velocity.e = a), this.isBouncingY && (this.velocity.f = r)
        }
        enable() {
            const {
                content: t
            } = this, e = new DOMMatrixReadOnly(window.getComputedStyle(t).transform);
            for (const t of v) this.current[t] = this.target[t] = e[t];
            this.updateMetrics(), this.attachObserver(), this.attachEvents(), this.state = b.Ready, this.emit("ready")
        }
        onClick(t) {
            var e;
            "click" === t.type && 0 === t.detail && (this.dragOffset.x = 0, this.dragOffset.y = 0), this.isDragging && (null === (e = this.pointerTracker) || void 0 === e || e.clear(), this.trackingPoints = [], this.startDecelAnim());
            const i = t.target;
            if (!i || t.defaultPrevented) return;
            if (i.hasAttribute("disabled")) return t.preventDefault(), void t.stopPropagation();
            if ((() => {
                const t = window.getSelection();
                return t && "Range" === t.type
            })() && !i.closest("button")) return;
            const n = i.closest("[data-panzoom-action]"),
                s = i.closest("[data-panzoom-change]"),
                o = n || s,
                a = o && S(o) ? o.dataset : null;
            if (a) {
                const e = a.panzoomChange,
                    i = a.panzoomAction;
                if ((e || i) && t.preventDefault(), e) {
                    let t = {};
                    try {
                        t = JSON.parse(e)
                    } catch (t) {
                        console && console.warn("The given data was not valid JSON")
                    }
                    return void this.applyChange(t)
                }
                if (i) return void (this[i] && this[i]())
            }
            if (Math.abs(this.dragOffset.x) > 3 || Math.abs(this.dragOffset.y) > 3) return t.preventDefault(), void t.stopPropagation();
            if (i.closest("[data-fancybox]")) return;
            const r = this.content.getBoundingClientRect(),
                l = this.dragStart;
            if (l.time && !this.canZoomOut() && (Math.abs(r.x - l.x) > 2 || Math.abs(r.y - l.y) > 2)) return;
            this.dragStart.time = 0;
            const c = e => {
                this.option("zoom", t) && e && "string" == typeof e && /(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(e) && "function" == typeof this[e] && (t.preventDefault(), this[e]({
                    event: t
                }))
            },
                h = this.option("click", t),
                d = this.option("dblClick", t);
            d ? (this.clicks++, 1 == this.clicks && (this.clickTimer = setTimeout((() => {
                1 === this.clicks ? (this.emit("click", t), !t.defaultPrevented && h && c(h)) : (this.emit("dblClick", t), t.defaultPrevented || c(d)), this.clicks = 0, this.clickTimer = null
            }), 350))) : (this.emit("click", t), !t.defaultPrevented && h && c(h))
        }
        addTrackingPoint(t) {
            const e = this.trackingPoints.filter((t => t.time > Date.now() - 100));
            e.push(t), this.trackingPoints = e
        }
        onPointerDown(t, e, i) {
            var n;
            if (!1 === this.option("touch", t)) return !1;
            this.pwt = 0, this.dragOffset = {
                x: 0,
                y: 0,
                time: 0
            }, this.trackingPoints = [];
            const s = this.content.getBoundingClientRect();
            if (this.dragStart = {
                x: s.x,
                y: s.y,
                top: s.top,
                left: s.left,
                time: Date.now()
            }, this.clickTimer) return !1;
            if (this.panMode === A && this.targetScale > 1) return t.preventDefault(), t.stopPropagation(), !1;
            const o = t.composedPath()[0];
            if (!i.length) {
                if (["TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO", "IFRAME"].includes(o.nodeName) || o.closest("[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]")) return !1;
                null === (n = window.getSelection()) || void 0 === n || n.removeAllRanges()
            }
            if ("mousedown" === t.type) ["A", "BUTTON"].includes(o.nodeName) || t.preventDefault();
            else if (Math.abs(this.velocity.a) > .3) return !1;
            return this.target.e = this.current.e, this.target.f = this.current.f, this.stop(), this.isDragging || (this.isDragging = !0, this.addTrackingPoint(e), this.emit("touchStart", t)), !0
        }
        onPointerMove(t, i, s) {
            if (!1 === this.option("touch", t)) return;
            if (!this.isDragging) return;
            if (i.length < 2 && this.panOnlyZoomed && e(this.targetScale) <= e(this.minScale)) return;
            if (this.emit("touchMove", t), t.defaultPrevented) return;
            this.addTrackingPoint(i[0]);
            const {
                content: o
            } = this, a = d(s[0], s[1]), r = d(i[0], i[1]);
            let l = 0,
                c = 0;
            if (i.length > 1) {
                const t = o.getBoundingClientRect();
                l = a.clientX - t.left - .5 * t.width, c = a.clientY - t.top - .5 * t.height
            }
            const u = h(s[0], s[1]),
                f = h(i[0], i[1]);
            let p = u ? f / u : 1,
                g = r.clientX - a.clientX,
                m = r.clientY - a.clientY;
            this.dragOffset.x += g, this.dragOffset.y += m, this.dragOffset.time = Date.now() - this.dragStart.time;
            let b = e(this.targetScale) === e(this.minScale) && this.option("lockAxis");
            if (b && !this.lockedAxis)
                if ("xy" === b || "y" === b || "touchmove" === t.type) {
                    if (Math.abs(this.dragOffset.x) < 6 && Math.abs(this.dragOffset.y) < 6) return void t.preventDefault();
                    const e = Math.abs(180 * Math.atan2(this.dragOffset.y, this.dragOffset.x) / Math.PI);
                    this.lockedAxis = e > 45 && e < 135 ? "y" : "x", this.dragOffset.x = 0, this.dragOffset.y = 0, g = 0, m = 0
                } else this.lockedAxis = b;
            if (n(t.target, this.content) && (b = "x", this.dragOffset.y = 0), b && "xy" !== b && this.lockedAxis !== b && e(this.targetScale) === e(this.minScale)) return;
            t.cancelable && t.preventDefault(), this.container.classList.add(this.cn("isDragging"));
            const v = this.checkBounds(g, m);
            this.option("rubberband") ? ("x" !== this.isInfinite && (v.xDiff > 0 && g < 0 || v.xDiff < 0 && g > 0) && (g *= Math.max(0, .5 - Math.abs(.75 / this.contentRect.fitWidth * v.xDiff))), "y" !== this.isInfinite && (v.yDiff > 0 && m < 0 || v.yDiff < 0 && m > 0) && (m *= Math.max(0, .5 - Math.abs(.75 / this.contentRect.fitHeight * v.yDiff)))) : (v.xDiff && (g = 0), v.yDiff && (m = 0));
            const y = this.targetScale,
                w = this.minScale,
                x = this.maxScale;
            y < .5 * w && (p = Math.max(p, w)), y > 1.5 * x && (p = Math.min(p, x)), "y" === this.lockedAxis && e(y) === e(w) && (g = 0), "x" === this.lockedAxis && e(y) === e(w) && (m = 0), this.applyChange({
                originX: l,
                originY: c,
                panX: g,
                panY: m,
                scale: p,
                friction: this.option("dragFriction"),
                ignoreBounds: !0
            })
        }
        onPointerUp(t, e, i) {
            if (i.length) return this.dragOffset.x = 0, this.dragOffset.y = 0, void (this.trackingPoints = []);
            this.container.classList.remove(this.cn("isDragging")), this.isDragging && (this.addTrackingPoint(e), this.panOnlyZoomed && this.contentRect.width - this.contentRect.fitWidth < 1 && this.contentRect.height - this.contentRect.fitHeight < 1 && (this.trackingPoints = []), n(t.target, this.content) && "y" === this.lockedAxis && (this.trackingPoints = []), this.emit("touchEnd", t), this.isDragging = !1, this.lockedAxis = !1, this.state !== b.Destroy && (t.defaultPrevented || this.startDecelAnim()))
        }
        startDecelAnim() {
            var t;
            const i = this.isScaling;
            this.rAF && (cancelAnimationFrame(this.rAF), this.rAF = null), this.isBouncingX = !1, this.isBouncingY = !1;
            for (const t of v) this.velocity[t] = 0;
            this.target.e = this.current.e, this.target.f = this.current.f, P(this.container, "is-scaling"), P(this.container, "is-animating"), this.isTicking = !1;
            const {
                trackingPoints: n
            } = this, s = n[0], o = n[n.length - 1];
            let a = 0,
                r = 0,
                l = 0;
            o && s && (a = o.clientX - s.clientX, r = o.clientY - s.clientY, l = o.time - s.time);
            const c = (null === (t = window.visualViewport) || void 0 === t ? void 0 : t.scale) || 1;
            1 !== c && (a *= c, r *= c);
            let h = 0,
                d = 0,
                u = 0,
                f = 0,
                p = this.option("decelFriction");
            const g = this.targetScale;
            if (l > 0) {
                u = Math.abs(a) > 3 ? a / (l / 30) : 0, f = Math.abs(r) > 3 ? r / (l / 30) : 0;
                const t = this.option("maxVelocity");
                t && (u = Math.max(Math.min(u, t), -1 * t), f = Math.max(Math.min(f, t), -1 * t))
            }
            u && (h = u / (1 / (1 - p) - 1)), f && (d = f / (1 / (1 - p) - 1)), ("y" === this.option("lockAxis") || "xy" === this.option("lockAxis") && "y" === this.lockedAxis && e(g) === this.minScale) && (h = u = 0), ("x" === this.option("lockAxis") || "xy" === this.option("lockAxis") && "x" === this.lockedAxis && e(g) === this.minScale) && (d = f = 0);
            const m = this.dragOffset.x,
                b = this.dragOffset.y,
                y = this.option("dragMinThreshold") || 0;
            Math.abs(m) < y && Math.abs(b) < y && (h = d = 0, u = f = 0), (this.option("zoom") && (g < this.minScale - 1e-5 || g > this.maxScale + 1e-5) || i && !h && !d) && (p = .35), this.applyChange({
                panX: h,
                panY: d,
                friction: p
            }), this.emit("decel", u, f, m, b)
        }
        onWheel(t) {
            var e = [-t.deltaX || 0, -t.deltaY || 0, -t.detail || 0].reduce((function (t, e) {
                return Math.abs(e) > Math.abs(t) ? e : t
            }));
            const i = Math.max(-1, Math.min(1, e));
            if (this.emit("wheel", t, i), this.panMode === A) return;
            if (t.defaultPrevented) return;
            const n = this.option("wheel");
            "pan" === n ? (t.preventDefault(), this.panOnlyZoomed && !this.canZoomOut() || this.applyChange({
                panX: 2 * -t.deltaX,
                panY: 2 * -t.deltaY,
                bounce: !1
            })) : "zoom" === n && !1 !== this.option("zoom") && this.zoomWithWheel(t)
        }
        onMouseMove(t) {
            this.panWithMouse(t)
        }
        onKeydown(t) {
            "Escape" === t.key && this.toggleFS()
        }
        onResize() {
            this.updateMetrics(), this.checkBounds().inBounds || this.requestTick()
        }
        setTransform() {
            this.emit("beforeTransform");
            const {
                current: t,
                target: i,
                content: n,
                contentRect: s
            } = this, o = Object.assign({}, T);
            for (const n of v) {
                const s = "e" == n || "f" === n ? O : M;
                o[n] = e(t[n], s), Math.abs(i[n] - t[n]) < ("e" == n || "f" === n ? .51 : .001) && (t[n] = i[n])
            }
            let {
                a: a,
                b: r,
                c: l,
                d: c,
                e: h,
                f: d
            } = o, u = `matrix(${a}, ${r}, ${l}, ${c}, ${h}, ${d})`, f = n.parentElement instanceof HTMLPictureElement ? n.parentElement : n;
            if (this.option("transformParent") && (f = f.parentElement || f), f.style.transform === u) return;
            f.style.transform = u;
            const {
                contentWidth: p,
                contentHeight: g
            } = this.calculateContentDim();
            s.width = p, s.height = g, this.emit("afterTransform")
        }
        updateMetrics(t = !1) {
            var i;
            if (!this || this.state === b.Destroy) return;
            if (this.isContentLoading) return;
            const n = Math.max(1, (null === (i = window.visualViewport) || void 0 === i ? void 0 : i.scale) || 1),
                {
                    container: s,
                    content: o
                } = this,
                a = o instanceof HTMLImageElement,
                r = s.getBoundingClientRect(),
                l = getComputedStyle(this.container);
            let c = r.width * n,
                h = r.height * n;
            const d = parseFloat(l.paddingTop) + parseFloat(l.paddingBottom),
                u = c - (parseFloat(l.paddingLeft) + parseFloat(l.paddingRight)),
                f = h - d;
            this.containerRect = {
                width: c,
                height: h,
                innerWidth: u,
                innerHeight: f
            };
            let p = this.option("width") || "auto",
                g = this.option("height") || "auto";
            "auto" === p && (p = parseFloat(o.dataset.width || "") || (t => {
                let e = 0;
                return e = t instanceof HTMLImageElement ? t.naturalWidth : t instanceof SVGElement ? t.width.baseVal.value : Math.max(t.offsetWidth, t.scrollWidth), e || 0
            })(o)), "auto" === g && (g = parseFloat(o.dataset.height || "") || (t => {
                let e = 0;
                return e = t instanceof HTMLImageElement ? t.naturalHeight : t instanceof SVGElement ? t.height.baseVal.value : Math.max(t.offsetHeight, t.scrollHeight), e || 0
            })(o));
            let m = o.parentElement instanceof HTMLPictureElement ? o.parentElement : o;
            this.option("transformParent") && (m = m.parentElement || m);
            const v = m.getAttribute("style") || "";
            m.style.setProperty("transform", "none", "important"), a && (m.style.width = "", m.style.height = ""), m.offsetHeight;
            const y = o.getBoundingClientRect();
            let w = y.width * n,
                x = y.height * n,
                E = 0,
                S = 0;
            a && (Math.abs(p - w) > 1 || Math.abs(g - x) > 1) && ({
                width: w,
                height: x,
                top: E,
                left: S
            } = ((t, e, i, n) => {
                const s = i / n;
                return s > t / e ? (i = t, n = t / s) : (i = e * s, n = e), {
                    width: i,
                    height: n,
                    top: .5 * (e - n),
                    left: .5 * (t - i)
                }
            })(w, x, p, g)), this.contentRect = Object.assign(Object.assign({}, this.contentRect), {
                top: y.top - r.top + E,
                bottom: r.bottom - y.bottom + E,
                left: y.left - r.left + S,
                right: r.right - y.right + S,
                fitWidth: w,
                fitHeight: x,
                width: w,
                height: x,
                fullWidth: p,
                fullHeight: g
            }), m.style.cssText = v, a && (m.style.width = `${w}px`, m.style.height = `${x}px`), this.setTransform(), !0 !== t && this.emit("refresh"), this.ignoreBounds || (e(this.targetScale) < e(this.minScale) ? this.zoomTo(this.minScale, {
                friction: 0
            }) : this.targetScale > this.maxScale ? this.zoomTo(this.maxScale, {
                friction: 0
            }) : this.state === b.Init || this.checkBounds().inBounds || this.requestTick()), this.updateControls()
        }
        calculateBounds() {
            const {
                contentWidth: t,
                contentHeight: i
            } = this.calculateContentDim(this.target), {
                targetScale: n,
                lockedAxis: s
            } = this, {
                fitWidth: o,
                fitHeight: a
            } = this.contentRect;
            let r = 0,
                l = 0,
                c = 0,
                h = 0;
            const d = this.option("infinite");
            if (!0 === d || s && d === s) r = -1 / 0, c = 1 / 0, l = -1 / 0, h = 1 / 0;
            else {
                let {
                    containerRect: s,
                    contentRect: d
                } = this, u = e(o * n, O), f = e(a * n, O), {
                    innerWidth: p,
                    innerHeight: g
                } = s;
                if (s.width === u && (p = s.width), s.width === f && (g = s.height), t > p) {
                    c = .5 * (t - p), r = -1 * c;
                    let e = .5 * (d.right - d.left);
                    r += e, c += e
                }
                if (o > p && t < p && (r -= .5 * (o - p), c -= .5 * (o - p)), i > g) {
                    h = .5 * (i - g), l = -1 * h;
                    let t = .5 * (d.bottom - d.top);
                    l += t, h += t
                }
                a > g && i < g && (r -= .5 * (a - g), c -= .5 * (a - g))
            }
            return {
                x: {
                    min: r,
                    max: c
                },
                y: {
                    min: l,
                    max: h
                }
            }
        }
        getBounds() {
            const t = this.option("bounds");
            return "auto" !== t ? t : this.calculateBounds()
        }
        updateControls() {
            const t = this,
                i = t.container,
                {
                    panMode: n,
                    contentRect: s,
                    fullScale: o,
                    targetScale: r,
                    coverScale: l,
                    maxScale: c,
                    minScale: h
                } = t;
            let d = {
                toggleMax: r - h < .5 * (c - h) ? c : h,
                toggleCover: r - h < .5 * (l - h) ? l : h,
                toggleZoom: r - h < .5 * (o - h) ? o : h
            }[t.option("click") || ""] || h,
                u = t.canZoomIn(),
                f = t.canZoomOut(),
                p = n === L && !!this.option("touch"),
                g = f && p;
            if (p && (e(r) < e(h) && !this.panOnlyZoomed && (g = !0), (e(s.width, 1) > e(s.fitWidth, 1) || e(s.height, 1) > e(s.fitHeight, 1)) && (g = !0)), e(s.width * r, 1) < e(s.fitWidth, 1) && (g = !1), n === A && (g = !1), a(i, this.cn("isDraggable"), g), !this.option("zoom")) return;
            let m = u && e(d) > e(r),
                b = !m && !g && f && e(d) < e(r);
            a(i, this.cn("canZoomIn"), m), a(i, this.cn("canZoomOut"), b);
            for (const t of i.querySelectorAll('[data-panzoom-action="zoomIn"]')) u ? (t.removeAttribute("disabled"), t.removeAttribute("tabindex")) : (t.setAttribute("disabled", ""), t.setAttribute("tabindex", "-1"));
            for (const t of i.querySelectorAll('[data-panzoom-action="zoomOut"]')) f ? (t.removeAttribute("disabled"), t.removeAttribute("tabindex")) : (t.setAttribute("disabled", ""), t.setAttribute("tabindex", "-1"));
            for (const t of i.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')) {
                u || f ? (t.removeAttribute("disabled"), t.removeAttribute("tabindex")) : (t.setAttribute("disabled", ""), t.setAttribute("tabindex", "-1"));
                const e = t.querySelector("g");
                e && (e.style.display = u ? "" : "none")
            }
        }
        panTo({
            x: t = this.target.e,
            y: e = this.target.f,
            scale: i = this.targetScale,
            friction: n = this.option("friction"),
            angle: s = 0,
            originX: o = 0,
            originY: a = 0,
            flipX: r = !1,
            flipY: l = !1,
            ignoreBounds: c = !1
        }) {
            this.state !== b.Destroy && this.applyChange({
                panX: t - this.target.e,
                panY: e - this.target.f,
                scale: i / this.targetScale,
                angle: s,
                originX: o,
                originY: a,
                friction: n,
                flipX: r,
                flipY: l,
                ignoreBounds: c
            })
        }
        applyChange({
            panX: t = 0,
            panY: i = 0,
            scale: n = 1,
            angle: s = 0,
            originX: o = -this.current.e,
            originY: a = -this.current.f,
            friction: r = this.option("friction"),
            flipX: l = !1,
            flipY: c = !1,
            ignoreBounds: h = !1,
            bounce: d = this.option("bounce")
        }) {
            const u = this.state;
            if (u === b.Destroy) return;
            this.rAF && (cancelAnimationFrame(this.rAF), this.rAF = null), this.friction = r || 0, this.ignoreBounds = h;
            const {
                current: f
            } = this, p = f.e, g = f.f, m = this.getMatrix(this.target);
            let y = (new DOMMatrix).translate(p, g).translate(o, a).translate(t, i);
            if (this.option("zoom")) {
                if (!h) {
                    const t = this.targetScale,
                        e = this.minScale,
                        i = this.maxScale;
                    t * n < e && (n = e / t), t * n > i && (n = i / t)
                }
                y = y.scale(n)
            }
            y = y.translate(-o, -a).translate(-p, -g).multiply(m), s && (y = y.rotate(s)), l && (y = y.scale(-1, 1)), c && (y = y.scale(1, -1));
            for (const t of v) "e" !== t && "f" !== t && (y[t] > this.minScale + 1e-5 || y[t] < this.minScale - 1e-5) ? this.target[t] = y[t] : this.target[t] = e(y[t], O);
            (this.targetScale < this.scale || Math.abs(n - 1) > .1 || this.panMode === A || !1 === d) && !h && this.clampTargetBounds(), u === b.Init ? this.animate() : this.isResting || (this.state = b.Panning, this.requestTick())
        }
        stop(t = !1) {
            if (this.state === b.Init || this.state === b.Destroy) return;
            const e = this.isTicking;
            this.rAF && (cancelAnimationFrame(this.rAF), this.rAF = null), this.isBouncingX = !1, this.isBouncingY = !1;
            for (const e of v) this.velocity[e] = 0, "current" === t ? this.current[e] = this.target[e] : "target" === t && (this.target[e] = this.current[e]);
            this.setTransform(), P(this.container, "is-scaling"), P(this.container, "is-animating"), this.isTicking = !1, this.state = b.Ready, e && (this.emit("endAnimation"), this.updateControls())
        }
        requestTick() {
            this.isTicking || (this.emit("startAnimation"), this.updateControls(), C(this.container, "is-animating"), this.isScaling && C(this.container, "is-scaling")), this.isTicking = !0, this.rAF || (this.rAF = requestAnimationFrame((() => this.animate())))
        }
        panWithMouse(t, i = this.option("mouseMoveFriction")) {
            if (this.pmme = t, this.panMode !== A || !t) return;
            if (e(this.targetScale) <= e(this.minScale)) return;
            this.emit("mouseMove", t);
            const {
                container: n,
                containerRect: s,
                contentRect: o
            } = this, a = s.width, r = s.height, l = n.getBoundingClientRect(), c = (t.clientX || 0) - l.left, h = (t.clientY || 0) - l.top;
            let {
                contentWidth: d,
                contentHeight: u
            } = this.calculateContentDim(this.target);
            const f = this.option("mouseMoveFactor");
            f > 1 && (d !== a && (d *= f), u !== r && (u *= f));
            let p = .5 * (d - a) - c / a * 100 / 100 * (d - a);
            p += .5 * (o.right - o.left);
            let g = .5 * (u - r) - h / r * 100 / 100 * (u - r);
            g += .5 * (o.bottom - o.top), this.applyChange({
                panX: p - this.target.e,
                panY: g - this.target.f,
                friction: i
            })
        }
        zoomWithWheel(t) {
            if (this.state === b.Destroy || this.state === b.Init) return;
            const i = Date.now();
            if (i - this.pwt < 45) return void t.preventDefault();
            this.pwt = i;
            var n = [-t.deltaX || 0, -t.deltaY || 0, -t.detail || 0].reduce((function (t, e) {
                return Math.abs(e) > Math.abs(t) ? e : t
            }));
            const s = Math.max(-1, Math.min(1, n)),
                {
                    targetScale: o,
                    maxScale: a,
                    minScale: r
                } = this;
            let l = o * (100 + 45 * s) / 100;
            e(l) < e(r) && e(o) <= e(r) ? (this.cwd += Math.abs(s), l = r) : e(l) > e(a) && e(o) >= e(a) ? (this.cwd += Math.abs(s), l = a) : (this.cwd = 0, l = Math.max(Math.min(l, a), r)), this.cwd > this.option("wheelLimit") || (t.preventDefault(), e(l) !== e(o) && this.zoomTo(l, {
                event: t
            }))
        }
        canZoomIn() {
            return this.option("zoom") && (e(this.contentRect.width, 1) < e(this.contentRect.fitWidth, 1) || e(this.targetScale) < e(this.maxScale))
        }
        canZoomOut() {
            return this.option("zoom") && e(this.targetScale) > e(this.minScale)
        }
        zoomIn(t = 1.25, e) {
            this.zoomTo(this.targetScale * t, e)
        }
        zoomOut(t = .8, e) {
            this.zoomTo(this.targetScale * t, e)
        }
        zoomToFit(t) {
            this.zoomTo("fit", t)
        }
        zoomToCover(t) {
            this.zoomTo("cover", t)
        }
        zoomToFull(t) {
            this.zoomTo("full", t)
        }
        zoomToMax(t) {
            this.zoomTo("max", t)
        }
        toggleZoom(t) {
            this.zoomTo(this.targetScale - this.minScale < .5 * (this.fullScale - this.minScale) ? "full" : "fit", t)
        }
        toggleMax(t) {
            this.zoomTo(this.targetScale - this.minScale < .5 * (this.maxScale - this.minScale) ? "max" : "fit", t)
        }
        toggleCover(t) {
            this.zoomTo(this.targetScale - this.minScale < .5 * (this.coverScale - this.minScale) ? "cover" : "fit", t)
        }
        iterateZoom(t) {
            this.zoomTo("next", t)
        }
        zoomTo(t = 1, {
            friction: e = "auto",
            originX: i = "auto",
            originY: n = "auto",
            event: s
        } = {}) {
            if (this.isContentLoading || this.state === b.Destroy) return;
            const {
                targetScale: o
            } = this;
            this.stop();
            let a = 1;
            if (this.panMode === A && (s = this.pmme || s), s || "auto" === i || "auto" === n) {
                const t = this.content.getBoundingClientRect(),
                    e = this.container.getBoundingClientRect(),
                    o = s ? s.clientX : e.left + .5 * e.width,
                    a = s ? s.clientY : e.top + .5 * e.height;
                i = o - t.left - .5 * t.width, n = a - t.top - .5 * t.height
            }
            const r = this.fullScale,
                l = this.maxScale,
                c = this.coverScale;
            if ("number" == typeof t) a = t / o || 1;
            else if ("full" === t) a = r / o || 1;
            else if ("cover" === t) a = c / o || 1;
            else if ("max" === t) a = l / o || 1;
            else if ("fit" === t) a = 1 / o || 1;
            else if ("next" === t) {
                let t = [1, r, l].sort(((t, e) => t - e)),
                    e = t.findIndex((t => t > o + 1e-5));
                a = t[e] / o || 1 / o
            }
            e = "auto" === e ? a > 1 ? .15 : .25 : e, this.applyChange({
                scale: a,
                originX: i,
                originY: n,
                friction: e
            }), s && this.panMode === A && this.panWithMouse(s, e)
        }
        rotateCCW() {
            this.applyChange({
                angle: -90
            })
        }
        rotateCW() {
            this.applyChange({
                angle: 90
            })
        }
        flipX() {
            this.applyChange({
                flipX: !0
            })
        }
        flipY() {
            this.applyChange({
                flipY: !0
            })
        }
        fitX() {
            this.stop("target");
            const {
                containerRect: t,
                contentRect: e,
                target: i
            } = this;
            this.applyChange({
                panX: .5 * t.width - (e.left + .5 * e.fitWidth) - i.e,
                panY: .5 * t.height - (e.top + .5 * e.fitHeight) - i.f,
                scale: t.width / e.fitWidth / this.targetScale,
                originX: 0,
                originY: 0,
                ignoreBounds: !0
            })
        }
        fitY() {
            this.stop("target");
            const {
                containerRect: t,
                contentRect: e,
                target: i
            } = this;
            this.applyChange({
                panX: .5 * t.width - (e.left + .5 * e.fitWidth) - i.e,
                panY: .5 * t.innerHeight - (e.top + .5 * e.fitHeight) - i.f,
                scale: t.height / e.fitHeight / this.targetScale,
                originX: 0,
                originY: 0,
                ignoreBounds: !0
            })
        }
        toggleFS() {
            const {
                container: t
            } = this, e = this.cn("inFullscreen"), i = this.cn("htmlHasFullscreen");
            t.classList.toggle(e);
            const n = t.classList.contains(e);
            n ? (document.documentElement.classList.add(i), document.addEventListener("keydown", this.onKeydown, !0)) : (document.documentElement.classList.remove(i), document.removeEventListener("keydown", this.onKeydown, !0)), this.updateMetrics(), this.emit(n ? "enterFS" : "exitFS")
        }
        getMatrix(t = this.current) {
            const {
                a: e,
                b: i,
                c: n,
                d: s,
                e: o,
                f: a
            } = t;
            return new DOMMatrix([e, i, n, s, o, a])
        }
        reset(t) {
            if (this.state !== b.Init && this.state !== b.Destroy) {
                this.stop("current");
                for (const t of v) this.target[t] = T[t];
                this.target.a = this.minScale, this.target.d = this.minScale, this.clampTargetBounds(), this.isResting || (this.friction = void 0 === t ? this.option("friction") : t, this.state = b.Panning, this.requestTick())
            }
        }
        destroy() {
            this.stop(), this.state = b.Destroy, this.detachEvents(), this.detachObserver();
            const {
                container: t,
                content: e
            } = this, i = this.option("classes") || {};
            for (const e of Object.values(i)) t.classList.remove(e + "");
            e && (e.removeEventListener("load", this.onLoad), e.removeEventListener("error", this.onError)), this.detachPlugins()
        }
    }
    Object.defineProperty(I, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: w
    }), Object.defineProperty(I, "Plugins", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {}
    });
    const D = function (t, e) {
        let i = !0;
        return (...n) => {
            i && (i = !1, t(...n), setTimeout((() => {
                i = !0
            }), e))
        }
    },
        F = (t, e) => {
            let i = [];
            return t.childNodes.forEach((t => {
                t.nodeType !== Node.ELEMENT_NODE || e && !t.matches(e) || i.push(t)
            })), i
        },
        j = {
            viewport: null,
            track: null,
            enabled: !0,
            slides: [],
            axis: "x",
            transition: "fade",
            preload: 1,
            slidesPerPage: "auto",
            initialPage: 0,
            friction: .12,
            Panzoom: {
                decelFriction: .12
            },
            center: !0,
            infinite: !0,
            fill: !0,
            dragFree: !1,
            adaptiveHeight: !1,
            direction: "ltr",
            classes: {
                container: "f-carousel",
                viewport: "f-carousel__viewport",
                track: "f-carousel__track",
                slide: "f-carousel__slide",
                isLTR: "is-ltr",
                isRTL: "is-rtl",
                isHorizontal: "is-horizontal",
                isVertical: "is-vertical",
                inTransition: "in-transition",
                isSelected: "is-selected"
            },
            l10n: {
                NEXT: "Next slide",
                PREV: "Previous slide",
                GOTO: "Go to slide #%d"
            }
        };
    var H;
    ! function (t) {
        t[t.Init = 0] = "Init", t[t.Ready = 1] = "Ready", t[t.Destroy = 2] = "Destroy"
    }(H || (H = {}));
    const B = t => {
        if ("string" == typeof t || t instanceof HTMLElement) t = {
            html: t
        };
        else {
            const e = t.thumb;
            void 0 !== e && ("string" == typeof e && (t.thumbSrc = e), e instanceof HTMLImageElement && (t.thumbEl = e, t.thumbElSrc = e.src, t.thumbSrc = e.src), delete t.thumb)
        }
        return Object.assign({
            html: "",
            el: null,
            isDom: !1,
            class: "",
            customClass: "",
            index: -1,
            dim: 0,
            gap: 0,
            pos: 0,
            transition: !1
        }, t)
    },
        N = (t = {}) => Object.assign({
            index: -1,
            slides: [],
            dim: 0,
            pos: -1
        }, t);
    class _ extends g {
        constructor(t, e) {
            super(e), Object.defineProperty(this, "instance", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: t
            })
        }
        attach() { }
        detach() { }
    }
    const $ = {
        classes: {
            list: "f-carousel__dots",
            isDynamic: "is-dynamic",
            hasDots: "has-dots",
            dot: "f-carousel__dot",
            isBeforePrev: "is-before-prev",
            isPrev: "is-prev",
            isCurrent: "is-current",
            isNext: "is-next",
            isAfterNext: "is-after-next"
        },
        dotTpl: '<button type="button" data-carousel-page="%i" aria-label="{{GOTO}}"><span class="f-carousel__dot" aria-hidden="true"></span></button>',
        dynamicFrom: 11,
        maxCount: 1 / 0,
        minCount: 2
    };
    class W extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "isDynamic", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "list", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            })
        }
        onRefresh() {
            this.refresh()
        }
        build() {
            let t = this.list;
            if (!t) {
                t = document.createElement("ul"), C(t, this.cn("list")), t.setAttribute("role", "tablist");
                const e = this.instance.container;
                e.appendChild(t), C(e, this.cn("hasDots")), this.list = t
            }
            return t
        }
        refresh() {
            var t;
            const e = this.instance.pages.length,
                i = Math.min(2, this.option("minCount")),
                n = Math.max(2e3, this.option("maxCount")),
                s = this.option("dynamicFrom");
            if (e < i || e > n) return void this.cleanup();
            const o = "number" == typeof s && e > 5 && e >= s,
                r = !this.list || this.isDynamic !== o || this.list.children.length !== e;
            r && this.cleanup();
            const l = this.build();
            if (a(l, this.cn("isDynamic"), !!o), r)
                for (let t = 0; t < e; t++) l.append(this.createItem(t));
            let c, h = 0;
            for (const e of [...l.children]) {
                const i = h === this.instance.page;
                i && (c = e), a(e, this.cn("isCurrent"), i), null === (t = e.children[0]) || void 0 === t || t.setAttribute("aria-selected", i ? "true" : "false");
                for (const t of ["isBeforePrev", "isPrev", "isNext", "isAfterNext"]) P(e, this.cn(t));
                h++
            }
            if (c = c || l.firstChild, o && c) {
                const t = c.previousElementSibling,
                    e = t && t.previousElementSibling;
                C(t, this.cn("isPrev")), C(e, this.cn("isBeforePrev"));
                const i = c.nextElementSibling,
                    n = i && i.nextElementSibling;
                C(i, this.cn("isNext")), C(n, this.cn("isAfterNext"))
            }
            this.isDynamic = o
        }
        createItem(t = 0) {
            var e;
            const i = document.createElement("li");
            i.setAttribute("role", "presentation");
            const n = s(this.instance.localize(this.option("dotTpl"), [
                ["%d", t + 1]
            ]).replace(/\%i/g, t + ""));
            return i.appendChild(n), null === (e = i.children[0]) || void 0 === e || e.setAttribute("role", "tab"), i
        }
        cleanup() {
            this.list && (this.list.remove(), this.list = null), this.isDynamic = !1, P(this.instance.container, this.cn("hasDots"))
        }
        attach() {
            this.instance.on(["refresh", "change"], this.onRefresh)
        }
        detach() {
            this.instance.off(["refresh", "change"], this.onRefresh), this.cleanup()
        }
    }
    Object.defineProperty(W, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: $
    });
    const X = "disabled",
        q = "next",
        Y = "prev";
    class V extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "container", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "prev", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "next", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "isDom", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            })
        }
        onRefresh() {
            const t = this.instance,
                e = t.pages.length,
                i = t.page;
            if (e < 2) return void this.cleanup();
            this.build();
            let n = this.prev,
                s = this.next;
            n && s && (n.removeAttribute(X), s.removeAttribute(X), t.isInfinite || (i <= 0 && n.setAttribute(X, ""), i >= e - 1 && s.setAttribute(X, "")))
        }
        addBtn(t) {
            var e;
            const i = this.instance,
                n = document.createElement("button");
            n.setAttribute("tabindex", "0"), n.setAttribute("title", i.localize(`{{${t.toUpperCase()}}}`)), C(n, this.cn("button") + " " + this.cn(t === q ? "isNext" : "isPrev"));
            const s = i.isRTL ? t === q ? Y : q : t;
            var o;
            return n.innerHTML = i.localize(this.option(`${s}Tpl`)), n.dataset[`carousel${o = t, o ? o.match("^[a-z]") ? o.charAt(0).toUpperCase() + o.substring(1) : o : ""}`] = "true", null === (e = this.container) || void 0 === e || e.appendChild(n), n
        }
        build() {
            const t = this.instance.container,
                e = this.cn("container");
            let {
                container: i,
                prev: n,
                next: s
            } = this;
            i || (i = t.querySelector("." + e), this.isDom = !!i), i || (i = document.createElement("div"), C(i, e), t.appendChild(i)), this.container = i, s || (s = i.querySelector("[data-carousel-next]")), s || (s = this.addBtn(q)), this.next = s, n || (n = i.querySelector("[data-carousel-prev]")), n || (n = this.addBtn(Y)), this.prev = n
        }
        cleanup() {
            this.isDom || (this.prev && this.prev.remove(), this.next && this.next.remove(), this.container && this.container.remove()), this.prev = null, this.next = null, this.container = null, this.isDom = !1
        }
        attach() {
            this.instance.on(["refresh", "change"], this.onRefresh)
        }
        detach() {
            this.instance.off(["refresh", "change"], this.onRefresh), this.cleanup()
        }
    }
    Object.defineProperty(V, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {
            classes: {
                container: "f-carousel__nav",
                button: "f-button",
                isNext: "is-next",
                isPrev: "is-prev"
            },
            nextTpl: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M9 3l9 9-9 9"/></svg>',
            prevTpl: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M15 3l-9 9 9 9"/></svg>'
        }
    });
    class Z extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "selectedIndex", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "target", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "nav", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            })
        }
        addAsTargetFor(t) {
            this.target = this.instance, this.nav = t, this.attachEvents()
        }
        addAsNavFor(t) {
            this.nav = this.instance, this.target = t, this.attachEvents()
        }
        attachEvents() {
            const {
                nav: t,
                target: e
            } = this;
            t && e && (t.options.initialSlide = e.options.initialPage, t.state === H.Ready ? this.onNavReady(t) : t.on("ready", this.onNavReady), e.state === H.Ready ? this.onTargetReady(e) : e.on("ready", this.onTargetReady))
        }
        onNavReady(t) {
            t.on("createSlide", this.onNavCreateSlide), t.on("Panzoom.click", this.onNavClick), t.on("Panzoom.touchEnd", this.onNavTouch), this.onTargetChange()
        }
        onTargetReady(t) {
            t.on("change", this.onTargetChange), t.on("Panzoom.refresh", this.onTargetChange), this.onTargetChange()
        }
        onNavClick(t, e, i) {
            this.onNavTouch(t, t.panzoom, i)
        }
        onNavTouch(t, e, i) {
            var n, s;
            if (Math.abs(e.dragOffset.x) > 3 || Math.abs(e.dragOffset.y) > 3) return;
            const o = i.target,
                {
                    nav: a,
                    target: r
                } = this;
            if (!a || !r || !o) return;
            const l = o.closest("[data-index]");
            if (i.stopPropagation(), i.preventDefault(), !l) return;
            const c = parseInt(l.dataset.index || "", 10) || 0,
                h = r.getPageForSlide(c),
                d = a.getPageForSlide(c);
            a.slideTo(d), r.slideTo(h, {
                friction: (null === (s = null === (n = this.nav) || void 0 === n ? void 0 : n.plugins) || void 0 === s ? void 0 : s.Sync.option("friction")) || 0
            }), this.markSelectedSlide(c)
        }
        onNavCreateSlide(t, e) {
            e.index === this.selectedIndex && this.markSelectedSlide(e.index)
        }
        onTargetChange() {
            var t, e;
            const {
                target: i,
                nav: n
            } = this;
            if (!i || !n) return;
            if (n.state !== H.Ready || i.state !== H.Ready) return;
            const s = null === (e = null === (t = i.pages[i.page]) || void 0 === t ? void 0 : t.slides[0]) || void 0 === e ? void 0 : e.index,
                o = n.getPageForSlide(s);
            this.markSelectedSlide(s), n.slideTo(o, null === n.prevPage && null === i.prevPage ? {
                friction: 0
            } : void 0)
        }
        markSelectedSlide(t) {
            const e = this.nav;
            e && e.state === H.Ready && (this.selectedIndex = t, [...e.slides].map((e => {
                e.el && e.el.classList[e.index === t ? "add" : "remove"]("is-nav-selected")
            })))
        }
        attach() {
            const t = this;
            let e = t.options.target,
                i = t.options.nav;
            e ? t.addAsNavFor(e) : i && t.addAsTargetFor(i)
        }
        detach() {
            const t = this,
                e = t.nav,
                i = t.target;
            e && (e.off("ready", t.onNavReady), e.off("createSlide", t.onNavCreateSlide), e.off("Panzoom.click", t.onNavClick), e.off("Panzoom.touchEnd", t.onNavTouch)), t.nav = null, i && (i.off("ready", t.onTargetReady), i.off("refresh", t.onTargetChange), i.off("change", t.onTargetChange)), t.target = null
        }
    }
    Object.defineProperty(Z, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {
            friction: .35
        }
    });
    const U = {
        Navigation: V,
        Dots: W,
        Sync: Z
    },
        G = "animationend",
        K = "isSelected",
        J = "slide";
    class Q extends m {
        get axis() {
            return this.isHorizontal ? "e" : "f"
        }
        get isEnabled() {
            return this.state === H.Ready
        }
        get isInfinite() {
            let t = !1;
            const {
                contentDim: e,
                viewportDim: i,
                pages: n,
                slides: s
            } = this, o = s[0];
            return n.length >= 2 && o && e + o.dim >= i && (t = this.option("infinite")), t
        }
        get isRTL() {
            return "rtl" === this.option("direction")
        }
        get isHorizontal() {
            return "x" === this.option("axis")
        }
        constructor(t, e = {}, i = {}) {
            if (super(), Object.defineProperty(this, "bp", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: ""
            }), Object.defineProperty(this, "lp", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "userOptions", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {}
            }), Object.defineProperty(this, "userPlugins", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {}
            }), Object.defineProperty(this, "state", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: H.Init
            }), Object.defineProperty(this, "page", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "prevPage", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "container", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), Object.defineProperty(this, "viewport", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "track", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "slides", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: []
            }), Object.defineProperty(this, "pages", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: []
            }), Object.defineProperty(this, "panzoom", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "inTransition", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: new Set
            }), Object.defineProperty(this, "contentDim", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "viewportDim", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), "string" == typeof t && (t = document.querySelector(t)), !t || !S(t)) throw new Error("No Element found");
            this.container = t, this.slideNext = D(this.slideNext.bind(this), 150), this.slidePrev = D(this.slidePrev.bind(this), 150), this.userOptions = e, this.userPlugins = i, queueMicrotask((() => {
                this.processOptions()
            }))
        }
        processOptions() {
            var t, e;
            const i = f({}, Q.defaults, this.userOptions);
            let n = "";
            const s = i.breakpoints;
            if (s && u(s))
                for (const [t, e] of Object.entries(s)) window.matchMedia(t).matches && u(e) && (n += t, f(i, e));
            n === this.bp && this.state !== H.Init || (this.bp = n, this.state === H.Ready && (i.initialSlide = (null === (e = null === (t = this.pages[this.page]) || void 0 === t ? void 0 : t.slides[0]) || void 0 === e ? void 0 : e.index) || 0), this.state !== H.Init && this.destroy(), super.setOptions(i), !1 === this.option("enabled") ? this.attachEvents() : setTimeout((() => {
                this.init()
            }), 0))
        }
        init() {
            this.state = H.Init, this.emit("init"), this.attachPlugins(Object.assign(Object.assign({}, Q.Plugins), this.userPlugins)), this.emit("attachPlugins"), this.initLayout(), this.initSlides(), this.updateMetrics(), this.setInitialPosition(), this.initPanzoom(), this.attachEvents(), this.state = H.Ready, this.emit("ready")
        }
        initLayout() {
            const {
                container: t
            } = this, e = this.option("classes");
            C(t, this.cn("container")), a(t, e.isLTR, !this.isRTL), a(t, e.isRTL, this.isRTL), a(t, e.isVertical, !this.isHorizontal), a(t, e.isHorizontal, this.isHorizontal);
            let i = this.option("viewport") || t.querySelector(`.${e.viewport}`);
            i || (i = document.createElement("div"), C(i, e.viewport), i.append(...F(t, `.${e.slide}`)), t.prepend(i)), i.addEventListener("scroll", this.onScroll);
            let n = this.option("track") || t.querySelector(`.${e.track}`);
            n || (n = document.createElement("div"), C(n, e.track), n.append(...Array.from(i.childNodes))), n.setAttribute("aria-live", "polite"), i.contains(n) || i.prepend(n), this.viewport = i, this.track = n, this.emit("initLayout")
        }
        initSlides() {
            const {
                track: t
            } = this;
            if (!t) return;
            const e = [...this.slides],
                i = [];
            [...F(t, `.${this.cn(J)}`)].forEach((t => {
                if (S(t)) {
                    const e = B({
                        el: t,
                        isDom: !0,
                        index: this.slides.length
                    });
                    i.push(e)
                }
            }));
            for (let t of [...this.option("slides", []) || [], ...e]) i.push(B(t));
            this.slides = i;
            for (let t = 0; t < this.slides.length; t++) this.slides[t].index = t;
            for (const t of i) this.emit("beforeInitSlide", t, t.index), this.emit("initSlide", t, t.index);
            this.emit("initSlides")
        }
        setInitialPage() {
            const t = this.option("initialSlide");
            this.page = "number" == typeof t ? this.getPageForSlide(t) : parseInt(this.option("initialPage", 0) + "", 10) || 0
        }
        setInitialPosition() {
            const {
                track: t,
                pages: e,
                isHorizontal: i
            } = this;
            if (!t || !e.length) return;
            let n = this.page;
            e[n] || (this.page = n = 0);
            const s = (e[n].pos || 0) * (this.isRTL && i ? 1 : -1),
                o = i ? `${s}px` : "0",
                a = i ? "0" : `${s}px`;
            t.style.transform = `translate3d(${o}, ${a}, 0) scale(1)`, this.option("adaptiveHeight") && this.setViewportHeight()
        }
        initPanzoom() {
            this.panzoom && (this.panzoom.destroy(), this.panzoom = null);
            const t = this.option("Panzoom") || {};
            this.panzoom = new I(this.viewport, f({}, {
                content: this.track,
                zoom: !1,
                panOnlyZoomed: !1,
                lockAxis: this.isHorizontal ? "x" : "y",
                infinite: this.isInfinite,
                click: !1,
                dblClick: !1,
                touch: t => !(this.pages.length < 2 && !t.options.infinite),
                bounds: () => this.getBounds(),
                maxVelocity: t => Math.abs(t.target[this.axis] - t.current[this.axis]) < 2 * this.viewportDim ? 100 : 0
            }, t)), this.panzoom.on("*", ((t, e, ...i) => {
                this.emit(`Panzoom.${e}`, t, ...i)
            })), this.panzoom.on("decel", this.onDecel), this.panzoom.on("refresh", this.onRefresh), this.panzoom.on("beforeTransform", this.onBeforeTransform), this.panzoom.on("endAnimation", this.onEndAnimation)
        }
        attachEvents() {
            const t = this.container;
            t && (t.addEventListener("click", this.onClick, {
                passive: !1,
                capture: !1
            }), t.addEventListener("slideTo", this.onSlideTo)), window.addEventListener("resize", this.onResize)
        }
        createPages() {
            let t = [];
            const {
                contentDim: e,
                viewportDim: i
            } = this;
            let n = this.option("slidesPerPage");
            n = ("auto" === n || e <= i) && !1 !== this.option("fill") ? 1 / 0 : parseFloat(n + "");
            let s = 0,
                o = 0,
                a = 0;
            for (const e of this.slides) (!t.length || o + e.dim - i > .05 || a >= n) && (t.push(N()), s = t.length - 1, o = 0, a = 0), t[s].slides.push(e), o += e.dim + e.gap, a++;
            return t
        }
        processPages() {
            const t = this.pages,
                {
                    contentDim: i,
                    viewportDim: n,
                    isInfinite: s
                } = this,
                o = this.option("center"),
                a = this.option("fill"),
                r = a && o && i > n && !s;
            if (t.forEach(((t, e) => {
                var s;
                t.index = e, t.pos = (null === (s = t.slides[0]) || void 0 === s ? void 0 : s.pos) || 0, t.dim = 0;
                for (const [e, i] of t.slides.entries()) t.dim += i.dim, e < t.slides.length - 1 && (t.dim += i.gap);
                r && t.pos + .5 * t.dim < .5 * n ? t.pos = 0 : r && t.pos + .5 * t.dim >= i - .5 * n ? t.pos = i - n : o && (t.pos += -.5 * (n - t.dim))
            })), t.forEach((t => {
                a && !s && i > n && (t.pos = Math.max(t.pos, 0), t.pos = Math.min(t.pos, i - n)), t.pos = e(t.pos, 1e3), t.dim = e(t.dim, 1e3), Math.abs(t.pos) <= .1 && (t.pos = 0)
            })), s) return t;
            const l = [];
            let c;
            return t.forEach((t => {
                const e = Object.assign({}, t);
                c && e.pos === c.pos ? (c.dim += e.dim, c.slides = [...c.slides, ...e.slides]) : (e.index = l.length, c = e, l.push(e))
            })), l
        }
        getPageFromIndex(t = 0) {
            const e = this.pages.length;
            let i;
            return t = parseInt((t || 0).toString()) || 0, i = this.isInfinite ? (t % e + e) % e : Math.max(Math.min(t, e - 1), 0), i
        }
        getSlideMetrics(t) {
            var i, n;
            const s = this.isHorizontal ? "width" : "height";
            let o = 0,
                a = 0,
                r = t.el;
            const l = !(!r || r.parentNode);
            if (r ? o = parseFloat(r.dataset[s] || "") || 0 : (r = document.createElement("div"), r.style.visibility = "hidden", (this.track || document.body).prepend(r)), C(r, this.cn(J) + " " + t.class + " " + t.customClass), o) r.style[s] = `${o}px`, r.style["width" === s ? "height" : "width"] = "";
            else {
                l && (this.track || document.body).prepend(r), o = r.getBoundingClientRect()[s] * Math.max(1, (null === (i = window.visualViewport) || void 0 === i ? void 0 : i.scale) || 1);
                let t = r[this.isHorizontal ? "offsetWidth" : "offsetHeight"];
                t - 1 > o && (o = t)
            }
            const c = getComputedStyle(r);
            return "content-box" === c.boxSizing && (this.isHorizontal ? (o += parseFloat(c.paddingLeft) || 0, o += parseFloat(c.paddingRight) || 0) : (o += parseFloat(c.paddingTop) || 0, o += parseFloat(c.paddingBottom) || 0)), a = parseFloat(c[this.isHorizontal ? "marginRight" : "marginBottom"]) || 0, l ? null === (n = r.parentElement) || void 0 === n || n.removeChild(r) : t.el || r.remove(), {
                dim: e(o, 1e3),
                gap: e(a, 1e3)
            }
        }
        getBounds() {
            const {
                isInfinite: t,
                isRTL: e,
                isHorizontal: i,
                pages: n
            } = this;
            let s = {
                min: 0,
                max: 0
            };
            if (t) s = {
                min: -1 / 0,
                max: 1 / 0
            };
            else if (n.length) {
                const t = n[0].pos,
                    o = n[n.length - 1].pos;
                s = e && i ? {
                    min: t,
                    max: o
                } : {
                    min: -1 * o,
                    max: -1 * t
                }
            }
            return {
                x: i ? s : {
                    min: 0,
                    max: 0
                },
                y: i ? {
                    min: 0,
                    max: 0
                } : s
            }
        }
        repositionSlides() {
            let t, {
                isHorizontal: i,
                isRTL: n,
                isInfinite: s,
                viewport: o,
                viewportDim: a,
                contentDim: r,
                page: l,
                pages: c,
                slides: h,
                panzoom: d
            } = this,
                u = 0,
                f = 0,
                p = 0,
                g = 0;
            d ? g = -1 * d.current[this.axis] : c[l] && (g = c[l].pos || 0), t = i ? n ? "right" : "left" : "top", n && i && (g *= -1);
            for (const i of h) {
                const n = i.el;
                n ? ("top" === t ? (n.style.right = "", n.style.left = "") : n.style.top = "", i.index !== u ? n.style[t] = 0 === f ? "" : `${e(f, 1e3)}px` : n.style[t] = "", p += i.dim + i.gap, u++) : f += i.dim + i.gap
            }
            if (s && p && o) {
                let n = getComputedStyle(o),
                    s = "padding",
                    l = i ? "Right" : "Bottom",
                    c = parseFloat(n[s + (i ? "Left" : "Top")]);
                g -= c, a += c, a += parseFloat(n[s + l]);
                for (const i of h) i.el && (e(i.pos) < e(a) && e(i.pos + i.dim + i.gap) < e(g) && e(g) > e(r - a) && (i.el.style[t] = `${e(f + p, 1e3)}px`), e(i.pos + i.gap) >= e(r - a) && e(i.pos) > e(g + a) && e(g) < e(a) && (i.el.style[t] = `-${e(p, 1e3)}px`))
            }
            let m, b, v = [...this.inTransition];
            if (v.length > 1 && (m = c[v[0]], b = c[v[1]]), m && b) {
                let i = 0;
                for (const n of h) n.el ? this.inTransition.has(n.index) && m.slides.indexOf(n) < 0 && (n.el.style[t] = `${e(i + (m.pos - b.pos), 1e3)}px`) : i += n.dim + n.gap
            }
        }
        createSlideEl(t) {
            const {
                track: e,
                slides: i
            } = this;
            if (!e || !t) return;
            if (t.el && t.el.parentNode) return;
            const n = t.el || document.createElement("div");
            C(n, this.cn(J)), C(n, t.class), C(n, t.customClass);
            const s = t.html;
            s && (s instanceof HTMLElement ? n.appendChild(s) : n.innerHTML = t.html + "");
            const o = [];
            i.forEach(((t, e) => {
                t.el && o.push(e)
            }));
            const a = t.index;
            let r = null;
            if (o.length) {
                r = i[o.reduce(((t, e) => Math.abs(e - a) < Math.abs(t - a) ? e : t))]
            }
            const l = r && r.el && r.el.parentNode ? r.index < t.index ? r.el.nextSibling : r.el : null;
            e.insertBefore(n, e.contains(l) ? l : null), t.el = n, this.emit("createSlide", t)
        }
        removeSlideEl(t, e = !1) {
            const i = null == t ? void 0 : t.el;
            if (!i || !i.parentNode) return;
            const n = this.cn(K);
            if (i.classList.contains(n) && (P(i, n), this.emit("unselectSlide", t)), t.isDom && !e) return i.removeAttribute("aria-hidden"), i.removeAttribute("data-index"), void (i.style.left = "");
            this.emit("removeSlide", t);
            const s = new CustomEvent(G);
            i.dispatchEvent(s), t.el && (t.el.remove(), t.el = null)
        }
        transitionTo(t = 0, e = this.option("transition")) {
            var i, n, s, o;
            if (!e) return !1;
            const a = this.page,
                {
                    pages: r,
                    panzoom: l
                } = this;
            t = parseInt((t || 0).toString()) || 0;
            const c = this.getPageFromIndex(t);
            if (!l || !r[c] || r.length < 2 || Math.abs(((null === (n = null === (i = r[a]) || void 0 === i ? void 0 : i.slides[0]) || void 0 === n ? void 0 : n.dim) || 0) - this.viewportDim) > 1) return !1;
            const h = t > a ? 1 : -1,
                d = r[c].pos * (this.isRTL ? 1 : -1);
            if (a === c && Math.abs(d - l.target[this.axis]) < 1) return !1;
            this.clearTransitions();
            const u = l.isResting;
            C(this.container, this.cn("inTransition"));
            const f = (null === (s = r[a]) || void 0 === s ? void 0 : s.slides[0]) || null,
                p = (null === (o = r[c]) || void 0 === o ? void 0 : o.slides[0]) || null;
            this.inTransition.add(p.index), this.createSlideEl(p);
            let g = f.el,
                m = p.el;
            u || e === J || (e = "fadeFast", g = null);
            const b = this.isRTL ? "next" : "prev",
                v = this.isRTL ? "prev" : "next";
            return g && (this.inTransition.add(f.index), f.transition = e, g.addEventListener(G, this.onAnimationEnd), g.classList.add(`f-${e}Out`, `to-${h > 0 ? v : b}`)), m && (p.transition = e, m.addEventListener(G, this.onAnimationEnd), m.classList.add(`f-${e}In`, `from-${h > 0 ? b : v}`)), l.current[this.axis] = d, l.target[this.axis] = d, l.requestTick(), this.onChange(c), !0
        }
        manageSlideVisiblity() {
            const t = new Set,
                e = new Set,
                i = this.getVisibleSlides(parseFloat(this.option("preload", 0) + "") || 0);
            for (const n of this.slides) i.has(n) ? t.add(n) : e.add(n);
            for (const e of this.inTransition) t.add(this.slides[e]);
            for (const e of t) this.createSlideEl(e), this.lazyLoadSlide(e);
            for (const i of e) t.has(i) || this.removeSlideEl(i);
            this.markSelectedSlides(), this.repositionSlides()
        }
        markSelectedSlides() {
            if (!this.pages[this.page] || !this.pages[this.page].slides) return;
            const t = "aria-hidden";
            let e = this.cn(K);
            if (e)
                for (const i of this.slides) {
                    const n = i.el;
                    n && (n.dataset.index = `${i.index}`, n.classList.contains("f-thumbs__slide") ? this.getVisibleSlides(0).has(i) ? n.removeAttribute(t) : n.setAttribute(t, "true") : this.pages[this.page].slides.includes(i) ? (n.classList.contains(e) || (C(n, e), this.emit("selectSlide", i)), n.removeAttribute(t)) : (n.classList.contains(e) && (P(n, e), this.emit("unselectSlide", i)), n.setAttribute(t, "true")))
                }
        }
        flipInfiniteTrack() {
            const {
                axis: t,
                isHorizontal: e,
                isInfinite: i,
                isRTL: n,
                viewportDim: s,
                contentDim: o
            } = this, a = this.panzoom;
            if (!a || !i) return;
            let r = a.current[t],
                l = a.target[t] - r,
                c = 0,
                h = .5 * s;
            n && e ? (r < -h && (c = -1, r += o), r > o - h && (c = 1, r -= o)) : (r > h && (c = 1, r -= o), r < -o + h && (c = -1, r += o)), c && (a.current[t] = r, a.target[t] = r + l)
        }
        lazyLoadImg(t, e) {
            const i = this,
                n = "f-fadeIn",
                o = "is-preloading";
            let a = !1,
                r = null;
            const l = () => {
                a || (a = !0, r && (r.remove(), r = null), P(e, o), e.complete && (C(e, n), setTimeout((() => {
                    P(e, n)
                }), 350)), this.option("adaptiveHeight") && t.el && this.pages[this.page].slides.indexOf(t) > -1 && (i.updateMetrics(), i.setViewportHeight()), this.emit("load", t))
            };
            C(e, o), e.src = e.dataset.lazySrcset || e.dataset.lazySrc || "", delete e.dataset.lazySrc, delete e.dataset.lazySrcset, e.addEventListener("error", (() => {
                l()
            })), e.addEventListener("load", (() => {
                l()
            })), setTimeout((() => {
                const i = e.parentNode;
                i && t.el && (e.complete ? l() : a || (r = s(E), i.insertBefore(r, e)))
            }), 300)
        }
        lazyLoadSlide(t) {
            const e = t && t.el;
            if (!e) return;
            const i = new Set;
            let n = Array.from(e.querySelectorAll("[data-lazy-src],[data-lazy-srcset]"));
            e.dataset.lazySrc && n.push(e), n.map((t => {
                t instanceof HTMLImageElement ? i.add(t) : t instanceof HTMLElement && t.dataset.lazySrc && (t.style.backgroundImage = `url('${t.dataset.lazySrc}')`, delete t.dataset.lazySrc)
            }));
            for (const e of i) this.lazyLoadImg(t, e)
        }
        onAnimationEnd(t) {
            var e;
            const i = t.target,
                n = i ? parseInt(i.dataset.index || "", 10) || 0 : -1,
                s = this.slides[n],
                o = t.animationName;
            if (!i || !s || !o) return;
            const a = !!this.inTransition.has(n) && s.transition;
            a && o.substring(0, a.length + 2) === `f-${a}` && this.inTransition.delete(n), this.inTransition.size || this.clearTransitions(), n === this.page && (null === (e = this.panzoom) || void 0 === e ? void 0 : e.isResting) && this.emit("settle")
        }
        onDecel(t, e = 0, i = 0, n = 0, s = 0) {
            if (this.option("dragFree")) return void this.setPageFromPosition();
            const {
                isRTL: o,
                isHorizontal: a,
                axis: r,
                pages: l
            } = this, c = l.length, h = Math.abs(Math.atan2(i, e) / (Math.PI / 180));
            let d = 0;
            if (d = h > 45 && h < 135 ? a ? 0 : i : a ? e : 0, !c) return;
            let u = this.page,
                f = o && a ? 1 : -1;
            const p = t.current[r] * f;
            let {
                pageIndex: g
            } = this.getPageFromPosition(p);
            Math.abs(d) > 5 ? (l[u].dim < document.documentElement["client" + (this.isHorizontal ? "Width" : "Height")] - 1 && (u = g), u = o && a ? d < 0 ? u - 1 : u + 1 : d < 0 ? u + 1 : u - 1) : u = 0 === n && 0 === s ? u : g, this.slideTo(u, {
                transition: !1,
                friction: t.option("decelFriction")
            })
        }
        onClick(t) {
            const e = t.target,
                i = e && S(e) ? e.dataset : null;
            let n, s;
            i && (void 0 !== i.carouselPage ? (s = "slideTo", n = i.carouselPage) : void 0 !== i.carouselNext ? s = "slideNext" : void 0 !== i.carouselPrev && (s = "slidePrev")), s ? (t.preventDefault(), t.stopPropagation(), e && !e.hasAttribute("disabled") && this[s](n)) : this.emit("click", t)
        }
        onSlideTo(t) {
            const e = t.detail || 0;
            this.slideTo(this.getPageForSlide(e), {
                friction: 0
            })
        }
        onChange(t, e = 0) {
            const i = this.page;
            this.prevPage = i, this.page = t, this.option("adaptiveHeight") && this.setViewportHeight(), t !== i && (this.markSelectedSlides(), this.emit("change", t, i, e))
        }
        onRefresh() {
            let t = this.contentDim,
                e = this.viewportDim;
            this.updateMetrics(), this.contentDim === t && this.viewportDim === e || this.slideTo(this.page, {
                friction: 0,
                transition: !1
            })
        }
        onScroll() {
            var t;
            null === (t = this.viewport) || void 0 === t || t.scroll(0, 0)
        }
        onResize() {
            this.option("breakpoints") && this.processOptions()
        }
        onBeforeTransform(t) {
            this.lp !== t.current[this.axis] && (this.flipInfiniteTrack(), this.manageSlideVisiblity()), this.lp = t.current.e
        }
        onEndAnimation() {
            this.inTransition.size || this.emit("settle")
        }
        reInit(t = null, e = null) {
            this.destroy(), this.state = H.Init, this.prevPage = null, this.userOptions = t || this.userOptions, this.userPlugins = e || this.userPlugins, this.processOptions()
        }
        slideTo(t = 0, {
            friction: e = this.option("friction"),
            transition: i = this.option("transition")
        } = {}) {
            if (this.state === H.Destroy) return;
            t = parseInt((t || 0).toString()) || 0;
            const n = this.getPageFromIndex(t),
                {
                    axis: s,
                    isHorizontal: o,
                    isRTL: a,
                    pages: r,
                    panzoom: l
                } = this,
                c = r.length,
                h = a && o ? 1 : -1;
            if (!l || !c) return;
            if (this.page !== n) {
                const e = new Event("beforeChange", {
                    bubbles: !0,
                    cancelable: !0
                });
                if (this.emit("beforeChange", e, t), e.defaultPrevented) return
            }
            if (this.transitionTo(t, i)) return;
            let d = r[n].pos;
            if (this.isInfinite) {
                const e = this.contentDim,
                    i = l.target[s] * h;
                if (2 === c) d += e * Math.floor(parseFloat(t + "") / 2);
                else {
                    d = [d, d - e, d + e].reduce((function (t, e) {
                        return Math.abs(e - i) < Math.abs(t - i) ? e : t
                    }))
                }
            }
            d *= h, Math.abs(l.target[s] - d) < 1 || (l.panTo({
                x: o ? d : 0,
                y: o ? 0 : d,
                friction: e
            }), this.onChange(n))
        }
        slideToClosest(t) {
            if (this.panzoom) {
                const {
                    pageIndex: e
                } = this.getPageFromPosition();
                this.slideTo(e, t)
            }
        }
        slideNext() {
            this.slideTo(this.page + 1)
        }
        slidePrev() {
            this.slideTo(this.page - 1)
        }
        clearTransitions() {
            this.inTransition.clear(), P(this.container, this.cn("inTransition"));
            const t = ["to-prev", "to-next", "from-prev", "from-next"];
            for (const e of this.slides) {
                const i = e.el;
                if (i) {
                    i.removeEventListener(G, this.onAnimationEnd), i.classList.remove(...t);
                    const n = e.transition;
                    n && i.classList.remove(`f-${n}Out`, `f-${n}In`)
                }
            }
            this.manageSlideVisiblity()
        }
        addSlide(t, e) {
            var i, n, s, o;
            const a = this.panzoom,
                r = (null === (i = this.pages[this.page]) || void 0 === i ? void 0 : i.pos) || 0,
                l = (null === (n = this.pages[this.page]) || void 0 === n ? void 0 : n.dim) || 0,
                c = this.contentDim < this.viewportDim;
            let h = Array.isArray(e) ? e : [e];
            const d = [];
            for (const t of h) d.push(B(t));
            this.slides.splice(t, 0, ...d);
            for (let t = 0; t < this.slides.length; t++) this.slides[t].index = t;
            for (const t of d) this.emit("beforeInitSlide", t, t.index);
            if (this.page >= t && (this.page += d.length), this.updateMetrics(), a) {
                const e = (null === (s = this.pages[this.page]) || void 0 === s ? void 0 : s.pos) || 0,
                    i = (null === (o = this.pages[this.page]) || void 0 === o ? void 0 : o.dim) || 0,
                    n = this.pages.length || 1,
                    h = this.isRTL ? l - i : i - l,
                    d = this.isRTL ? r - e : e - r;
                c && 1 === n ? (t <= this.page && (a.current[this.axis] -= h, a.target[this.axis] -= h), a.panTo({
                    [this.isHorizontal ? "x" : "y"]: -1 * e
                })) : d && t <= this.page && (a.target[this.axis] -= d, a.current[this.axis] -= d, a.requestTick())
            }
            for (const t of d) this.emit("initSlide", t, t.index)
        }
        prependSlide(t) {
            this.addSlide(0, t)
        }
        appendSlide(t) {
            this.addSlide(this.slides.length, t)
        }
        removeSlide(t) {
            const e = this.slides.length;
            t = (t % e + e) % e;
            const i = this.slides[t];
            if (i) {
                this.removeSlideEl(i, !0), this.slides.splice(t, 1);
                for (let t = 0; t < this.slides.length; t++) this.slides[t].index = t;
                this.updateMetrics(), this.slideTo(this.page, {
                    friction: 0,
                    transition: !1
                }), this.emit("destroySlide", i)
            }
        }
        updateMetrics() {
            const {
                panzoom: t,
                viewport: i,
                track: n,
                slides: s,
                isHorizontal: o,
                isInfinite: a
            } = this;
            if (!n) return;
            const r = o ? "width" : "height",
                l = o ? "offsetWidth" : "offsetHeight";
            if (i) {
                let t = Math.max(i[l], e(i.getBoundingClientRect()[r], 1e3)),
                    n = getComputedStyle(i),
                    s = "padding",
                    a = o ? "Right" : "Bottom";
                t -= parseFloat(n[s + (o ? "Left" : "Top")]) + parseFloat(n[s + a]), this.viewportDim = t
            }
            let c, h = 0;
            for (const [t, i] of s.entries()) {
                let n = 0,
                    o = 0;
                !i.el && c ? (n = c.dim, o = c.gap) : (({
                    dim: n,
                    gap: o
                } = this.getSlideMetrics(i)), c = i), n = e(n, 1e3), o = e(o, 1e3), i.dim = n, i.gap = o, i.pos = h, h += n, (a || t < s.length - 1) && (h += o)
            }
            h = e(h, 1e3), this.contentDim = h, t && (t.contentRect[r] = h, t.contentRect[o ? "fullWidth" : "fullHeight"] = h), this.pages = this.createPages(), this.pages = this.processPages(), this.state === H.Init && this.setInitialPage(), this.page = Math.max(0, Math.min(this.page, this.pages.length - 1)), this.manageSlideVisiblity(), this.emit("refresh")
        }
        getProgress(t, i = !1, n = !1) {
            void 0 === t && (t = this.page);
            const s = this,
                o = s.panzoom,
                a = s.contentDim,
                r = s.pages[t] || 0;
            if (!r || !o) return t > this.page ? -1 : 1;
            let l = -1 * o.current.e,
                c = e((l - r.pos) / (1 * r.dim), 1e3),
                h = c,
                d = c;
            this.isInfinite && !0 !== n && (h = e((l - r.pos + a) / (1 * r.dim), 1e3), d = e((l - r.pos - a) / (1 * r.dim), 1e3));
            let u = [c, h, d].reduce((function (t, e) {
                return Math.abs(e) < Math.abs(t) ? e : t
            }));
            return i ? u : u > 1 ? 1 : u < -1 ? -1 : u
        }
        setViewportHeight() {
            const {
                page: t,
                pages: e,
                viewport: i,
                isHorizontal: n
            } = this;
            if (!i || !e[t]) return;
            let s = 0;
            n && this.track && (this.track.style.height = "auto", e[t].slides.forEach((t => {
                t.el && (s = Math.max(s, t.el.offsetHeight))
            }))), i.style.height = s ? `${s}px` : ""
        }
        getPageForSlide(t) {
            for (const e of this.pages)
                for (const i of e.slides)
                    if (i.index === t) return e.index;
            return -1
        }
        getVisibleSlides(t = 0) {
            var e;
            const i = new Set;
            let {
                panzoom: n,
                contentDim: s,
                viewportDim: o,
                pages: a,
                page: r
            } = this;
            if (o) {
                s = s + (null === (e = this.slides[this.slides.length - 1]) || void 0 === e ? void 0 : e.gap) || 0;
                let l = 0;
                l = n && n.state !== b.Init && n.state !== b.Destroy ? -1 * n.current[this.axis] : a[r] && a[r].pos || 0, this.isInfinite && (l -= Math.floor(l / s) * s), this.isRTL && this.isHorizontal && (l *= -1);
                const c = l - o * t,
                    h = l + o * (t + 1),
                    d = this.isInfinite ? [-1, 0, 1] : [0];
                for (const t of this.slides)
                    for (const e of d) {
                        const n = t.pos + e * s,
                            o = n + t.dim + t.gap;
                        n < h && o > c && i.add(t)
                    }
            }
            return i
        }
        getPageFromPosition(t) {
            const {
                viewportDim: e,
                contentDim: i,
                slides: n,
                pages: s,
                panzoom: o
            } = this, a = s.length, r = n.length, l = n[0], c = n[r - 1], h = this.option("center");
            let d = 0,
                u = 0,
                f = 0,
                p = void 0 === t ? -1 * ((null == o ? void 0 : o.target[this.axis]) || 0) : t;
            h && (p += .5 * e), this.isInfinite ? (p < l.pos - .5 * c.gap && (p -= i, f = -1), p > c.pos + c.dim + .5 * c.gap && (p -= i, f = 1)) : p = Math.max(l.pos || 0, Math.min(p, c.pos));
            let g = c,
                m = n.find((t => {
                    const e = t.pos - .5 * g.gap,
                        i = t.pos + t.dim + .5 * t.gap;
                    return g = t, p >= e && p < i
                }));
            return m || (m = c), u = this.getPageForSlide(m.index), d = u + f * a, {
                page: d,
                pageIndex: u
            }
        }
        setPageFromPosition() {
            const {
                pageIndex: t
            } = this.getPageFromPosition();
            this.onChange(t)
        }
        destroy() {
            if ([H.Destroy].includes(this.state)) return;
            this.state = H.Destroy;
            const {
                container: t,
                viewport: e,
                track: i,
                slides: n,
                panzoom: s
            } = this, o = this.option("classes");
            t.removeEventListener("click", this.onClick, {
                passive: !1,
                capture: !1
            }), t.removeEventListener("slideTo", this.onSlideTo), window.removeEventListener("resize", this.onResize), s && (s.destroy(), this.panzoom = null), n && n.forEach((t => {
                this.removeSlideEl(t)
            })), this.detachPlugins(), e && (e.removeEventListener("scroll", this.onScroll), e.offsetParent && i && i.offsetParent && e.replaceWith(...i.childNodes));
            for (const [e, i] of Object.entries(o)) "container" !== e && i && t.classList.remove(i);
            this.track = null, this.viewport = null, this.page = 0, this.slides = [];
            const a = this.events.get("ready");
            this.events = new Map, a && this.events.set("ready", a)
        }
    }
    Object.defineProperty(Q, "Panzoom", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: I
    }), Object.defineProperty(Q, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: j
    }), Object.defineProperty(Q, "Plugins", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: U
    });
    const tt = function (t) {
        if (!S(t)) return 0;
        const e = window.scrollY,
            i = window.innerHeight,
            n = e + i,
            s = t.getBoundingClientRect(),
            o = s.y + e,
            a = s.height,
            r = o + a;
        if (e > r || n < o) return 0;
        if (e < o && n > r) return 100;
        if (o < e && r > n) return 100;
        let l = a;
        o < e && (l -= e - o), r > n && (l -= r - n);
        const c = l / i * 100;
        return Math.round(c)
    },
        et = !("undefined" == typeof window || !window.document || !window.document.createElement);
    let it;
    const nt = ["a[href]", "area[href]", 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', "select:not([disabled]):not([aria-hidden])", "textarea:not([disabled]):not([aria-hidden])", "button:not([disabled]):not([aria-hidden]):not(.fancybox-focus-guard)", "iframe", "object", "embed", "video", "audio", "[contenteditable]", '[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'].join(","),
        st = t => {
            if (t && et) {
                void 0 === it && document.createElement("div").focus({
                    get preventScroll() {
                        return it = !0, !1
                    }
                });
                try {
                    if (it) t.focus({
                        preventScroll: !0
                    });
                    else {
                        const e = window.scrollY || document.body.scrollTop,
                            i = window.scrollX || document.body.scrollLeft;
                        t.focus(), document.body.scrollTo({
                            top: e,
                            left: i,
                            behavior: "auto"
                        })
                    }
                } catch (t) { }
            }
        },
        ot = () => {
            const t = document;
            let e, i = "",
                n = "",
                s = "";
            return t.fullscreenEnabled ? (i = "requestFullscreen", n = "exitFullscreen", s = "fullscreenElement") : t.webkitFullscreenEnabled && (i = "webkitRequestFullscreen", n = "webkitExitFullscreen", s = "webkitFullscreenElement"), i && (e = {
                request: function (e = t.documentElement) {
                    return "webkitRequestFullscreen" === i ? e[i](Element.ALLOW_KEYBOARD_INPUT) : e[i]()
                },
                exit: function () {
                    return t[s] && t[n]()
                },
                isFullscreen: function () {
                    return t[s]
                }
            }), e
        },
        at = {
            dragToClose: !0,
            hideScrollbar: !0,
            Carousel: {
                classes: {
                    container: "fancybox__carousel",
                    viewport: "fancybox__viewport",
                    track: "fancybox__track",
                    slide: "fancybox__slide"
                }
            },
            contentClick: "toggleZoom",
            contentDblClick: !1,
            backdropClick: "close",
            animated: !0,
            idle: 3500,
            showClass: "f-zoomInUp",
            hideClass: "f-fadeOut",
            commonCaption: !1,
            parentEl: null,
            startIndex: 0,
            l10n: Object.assign(Object.assign({}, y), {
                CLOSE: "Close",
                NEXT: "Next",
                PREV: "Previous",
                MODAL: "You can close this modal content with the ESC key",
                ERROR: "Something Went Wrong, Please Try Again Later",
                IMAGE_ERROR: "Image Not Found",
                ELEMENT_NOT_FOUND: "HTML Element Not Found",
                AJAX_NOT_FOUND: "Error Loading AJAX : Not Found",
                AJAX_FORBIDDEN: "Error Loading AJAX : Forbidden",
                IFRAME_ERROR: "Error Loading Page",
                TOGGLE_ZOOM: "Toggle zoom level",
                TOGGLE_THUMBS: "Toggle thumbnails",
                TOGGLE_SLIDESHOW: "Toggle slideshow",
                TOGGLE_FULLSCREEN: "Toggle full-screen mode",
                DOWNLOAD: "Download"
            }),
            tpl: {
                closeButton: '<button data-fancybox-close class="f-button is-close-btn" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M20 20L4 4m16 0L4 20"/></svg></button>',
                main: '<div class="fancybox__container" role="dialog" aria-modal="true" aria-label="{{MODAL}}" tabindex="-1">\n    <div class="fancybox__backdrop"></div>\n    <div class="fancybox__carousel"></div>\n    <div class="fancybox__footer"></div>\n  </div>'
            },
            groupAll: !1,
            groupAttr: "data-fancybox",
            defaultType: "image",
            defaultDisplay: "block",
            autoFocus: !0,
            trapFocus: !0,
            placeFocusBack: !0,
            closeButton: "auto",
            keyboard: {
                Escape: "close",
                Delete: "close",
                Backspace: "close",
                PageUp: "next",
                PageDown: "prev",
                ArrowUp: "prev",
                ArrowDown: "next",
                ArrowRight: "next",
                ArrowLeft: "prev"
            },
            Fullscreen: {
                autoStart: !1
            },
            compact: () => window.matchMedia("(max-width: 578px), (max-height: 578px)").matches,
            wheel: "zoom"
        };
    var rt, lt;
    ! function (t) {
        t[t.Init = 0] = "Init", t[t.Ready = 1] = "Ready", t[t.Closing = 2] = "Closing", t[t.CustomClosing = 3] = "CustomClosing", t[t.Destroy = 4] = "Destroy"
    }(rt || (rt = {})),
        function (t) {
            t[t.Loading = 0] = "Loading", t[t.Opening = 1] = "Opening", t[t.Ready = 2] = "Ready", t[t.Closing = 3] = "Closing"
        }(lt || (lt = {}));
    const ct = () => {
        queueMicrotask((() => {
            (() => {
                const {
                    slug: t,
                    index: e
                } = ht.parseURL(), i = ye.getInstance();
                if (i && !1 !== i.option("Hash")) {
                    const n = i.carousel;
                    if (t && n) {
                        for (let e of n.slides)
                            if (e.slug && e.slug === t) return n.slideTo(e.index);
                        if (t === i.option("slug")) return n.slideTo(e - 1);
                        const s = i.getSlide(),
                            o = s && s.triggerEl && s.triggerEl.dataset;
                        if (o && o.fancybox === t) return n.slideTo(e - 1)
                    }
                    ht.hasSilentClose = !0, i.close()
                }
                ht.startFromUrl()
            })()
        }))
    };
    class ht extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "origHash", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: ""
            }), Object.defineProperty(this, "timer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            })
        }
        onChange() {
            const t = this.instance,
                e = t.carousel;
            this.timer && clearTimeout(this.timer);
            const i = t.getSlide();
            if (!e || !i) return;
            const n = t.isOpeningSlide(i),
                s = new URL(document.URL).hash;
            let o, a = i.slug || void 0,
                r = i.triggerEl || void 0;
            o = a || this.instance.option("slug"), !o && r && r.dataset && (o = r.dataset.fancybox);
            let l = "";
            o && "true" !== o && (l = "#" + o + (!a && e.slides.length > 1 ? "-" + (i.index + 1) : "")), n && (this.origHash = s !== l ? s : ""), l && s !== l && (this.timer = setTimeout((() => {
                try {
                    t.state === rt.Ready && window.history[n ? "pushState" : "replaceState"]({}, document.title, window.location.pathname + window.location.search + l)
                } catch (t) { }
            }), 300))
        }
        onClose() {
            if (this.timer && clearTimeout(this.timer), !0 !== ht.hasSilentClose) try {
                window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (this.origHash || ""))
            } catch (t) { }
        }
        attach() {
            const t = this.instance;
            t.on(["Carousel.ready", "Carousel.change"], this.onChange), t.on("close", this.onClose)
        }
        detach() {
            const t = this.instance;
            t.off(["Carousel.ready", "Carousel.change"], this.onChange), t.off("close", this.onClose)
        }
        static parseURL() {
            const t = window.location.hash.slice(1),
                e = t.split("-"),
                i = e[e.length - 1],
                n = i && /^\+?\d+$/.test(i) && parseInt(e.pop() || "1", 10) || 1;
            return {
                hash: t,
                slug: e.join("-"),
                index: n
            }
        }
        static startFromUrl() {
            if (ht.hasSilentClose = !1, ye.getInstance() || !1 === ye.defaults.Hash) return;
            const {
                hash: t,
                slug: e,
                index: i
            } = ht.parseURL();
            if (!e) return;
            let n = document.querySelector(`[data-slug="${t}"]`);
            if (n && n.dispatchEvent(new CustomEvent("click", {
                bubbles: !0,
                cancelable: !0
            })), ye.getInstance()) return;
            const s = document.querySelectorAll(`[data-fancybox="${e}"]`);
            s.length && (n = s[i - 1], n && n.dispatchEvent(new CustomEvent("click", {
                bubbles: !0,
                cancelable: !0
            })))
        }
        static destroy() {
            window.removeEventListener("hashchange", ct, !1)
        }
    }

    function dt() {
        window.addEventListener("hashchange", ct, !1), setTimeout((() => {
            ht.startFromUrl()
        }), 500)
    }
    Object.defineProperty(ht, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {}
    }), Object.defineProperty(ht, "hasSilentClose", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: !1
    }), et && (/complete|interactive|loaded/.test(document.readyState) ? dt() : document.addEventListener("DOMContentLoaded", dt));
    const ut = "is-zooming-in";
    class ft extends _ {
        onCreateSlide(t, e, i) {
            const n = this.instance.optionFor(i, "src") || "";
            i.el && "image" === i.type && "string" == typeof n && this.setImage(i, n)
        }
        onRemoveSlide(t, e, i) {
            i.panzoom && i.panzoom.destroy(), i.panzoom = void 0, i.imageEl = void 0
        }
        onChange(t, e, i, n) {
            P(this.instance.container, ut);
            for (const t of e.slides) {
                const e = t.panzoom;
                e && t.index !== i && e.reset(.35)
            }
        }
        onClose() {
            var t;
            const e = this.instance,
                i = e.container,
                n = e.getSlide();
            if (!i || !i.parentElement || !n) return;
            const {
                el: s,
                contentEl: o,
                panzoom: a,
                thumbElSrc: r
            } = n;
            if (!s || !r || !o || !a || a.isContentLoading || a.state === b.Init || a.state === b.Destroy) return;
            a.updateMetrics();
            let l = this.getZoomInfo(n);
            if (!l) return;
            this.instance.state = rt.CustomClosing, i.classList.remove(ut), i.classList.add("is-zooming-out"), o.style.backgroundImage = `url('${r}')`;
            const c = i.getBoundingClientRect();
            1 === ((null === (t = window.visualViewport) || void 0 === t ? void 0 : t.scale) || 1) && Object.assign(i.style, {
                position: "absolute",
                top: `${i.offsetTop + window.scrollY}px`,
                left: `${i.offsetLeft + window.scrollX}px`,
                bottom: "auto",
                right: "auto",
                width: `${c.width}px`,
                height: `${c.height}px`,
                overflow: "hidden"
            });
            const {
                x: h,
                y: d,
                scale: u,
                opacity: f
            } = l;
            if (f) {
                const t = ((t, e, i, n) => {
                    const s = e - t,
                        o = n - i;
                    return e => i + ((e - t) / s * o || 0)
                })(a.scale, u, 1, 0);
                a.on("afterTransform", (() => {
                    o.style.opacity = t(a.scale) + ""
                }))
            }
            a.on("endAnimation", (() => {
                e.destroy()
            })), a.target.a = u, a.target.b = 0, a.target.c = 0, a.target.d = u, a.panTo({
                x: h,
                y: d,
                scale: u,
                friction: f ? .2 : .33,
                ignoreBounds: !0
            }), a.isResting && e.destroy()
        }
        setImage(t, e) {
            const i = this.instance;
            t.src = e, this.process(t, e).then((e => {
                const {
                    contentEl: n,
                    imageEl: s,
                    thumbElSrc: o,
                    el: a
                } = t;
                if (i.isClosing() || !n || !s) return;
                n.offsetHeight;
                const r = !!i.isOpeningSlide(t) && this.getZoomInfo(t);
                if (this.option("protected") && a) {
                    a.addEventListener("contextmenu", (t => {
                        t.preventDefault()
                    }));
                    const t = document.createElement("div");
                    C(t, "fancybox-protected"), n.appendChild(t)
                }
                if (o && r) {
                    const s = e.contentRect,
                        a = Math.max(s.fullWidth, s.fullHeight);
                    let c = null;
                    !r.opacity && a > 1200 && (c = document.createElement("img"), C(c, "fancybox-ghost"), c.src = o, n.appendChild(c));
                    const h = () => {
                        c && (C(c, "f-fadeFastOut"), setTimeout((() => {
                            c && (c.remove(), c = null)
                        }), 200))
                    };
                    (l = o, new Promise(((t, e) => {
                        const i = new Image;
                        i.onload = t, i.onerror = e, i.src = l
                    }))).then((() => {
                        i.hideLoading(t), t.state = lt.Opening, this.instance.emit("reveal", t), this.zoomIn(t).then((() => {
                            h(), this.instance.done(t)
                        }), (() => { })), c && setTimeout((() => {
                            h()
                        }), a > 2500 ? 800 : 200)
                    }), (() => {
                        i.hideLoading(t), i.revealContent(t)
                    }))
                } else {
                    const n = this.optionFor(t, "initialSize"),
                        s = this.optionFor(t, "zoom"),
                        o = {
                            event: i.prevMouseMoveEvent || i.options.event,
                            friction: s ? .12 : 0
                        };
                    let a = i.optionFor(t, "showClass") || void 0,
                        r = !0;
                    i.isOpeningSlide(t) && ("full" === n ? e.zoomToFull(o) : "cover" === n ? e.zoomToCover(o) : "max" === n ? e.zoomToMax(o) : r = !1, e.stop("current")), r && a && (a = e.isDragging ? "f-fadeIn" : ""), i.hideLoading(t), i.revealContent(t, a)
                }
                var l
            }), (() => {
                i.setError(t, "{{IMAGE_ERROR}}")
            }))
        }
        process(t, e) {
            return new Promise(((i, n) => {
                var o;
                const a = this.instance,
                    r = t.el;
                a.clearContent(t), a.showLoading(t);
                let l = this.optionFor(t, "content");
                if ("string" == typeof l && (l = s(l)), !l || !S(l)) {
                    if (l = document.createElement("img"), l instanceof HTMLImageElement) {
                        let i = "",
                            n = t.caption;
                        i = "string" == typeof n && n ? n.replace(/<[^>]+>/gi, "").substring(0, 1e3) : `Image ${t.index + 1} of ${(null === (o = a.carousel) || void 0 === o ? void 0 : o.pages.length) || 1}`, l.src = e || "", l.alt = i, l.draggable = !1, t.srcset && l.setAttribute("srcset", t.srcset), this.instance.isOpeningSlide(t) && (l.fetchPriority = "high")
                    }
                    t.sizes && l.setAttribute("sizes", t.sizes)
                }
                C(l, "fancybox-image"), t.imageEl = l, a.setContent(t, l, !1);
                t.panzoom = new I(r, f({
                    transformParent: !0
                }, this.option("Panzoom") || {}, {
                    content: l,
                    width: a.optionFor(t, "width", "auto"),
                    height: a.optionFor(t, "height", "auto"),
                    wheel: () => {
                        const t = a.option("wheel");
                        return ("zoom" === t || "pan" == t) && t
                    },
                    click: (e, i) => {
                        var n, s;
                        if (a.isCompact || a.isClosing()) return !1;
                        if (t.index !== (null === (n = a.getSlide()) || void 0 === n ? void 0 : n.index)) return !1;
                        if (i) {
                            const t = i.composedPath()[0];
                            if (["A", "BUTTON", "TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO"].includes(t.nodeName)) return !1
                        }
                        let o = !i || i.target && (null === (s = t.contentEl) || void 0 === s ? void 0 : s.contains(i.target));
                        return a.option(o ? "contentClick" : "backdropClick") || !1
                    },
                    dblClick: () => a.isCompact ? "toggleZoom" : a.option("contentDblClick") || !1,
                    spinner: !1,
                    panOnlyZoomed: !0,
                    wheelLimit: 1 / 0,
                    on: {
                        ready: t => {
                            i(t)
                        },
                        error: () => {
                            n()
                        },
                        destroy: () => {
                            n()
                        }
                    }
                }))
            }))
        }
        zoomIn(t) {
            return new Promise(((e, i) => {
                const n = this.instance,
                    s = n.container,
                    {
                        panzoom: o,
                        contentEl: a,
                        el: r
                    } = t;
                o && o.updateMetrics();
                const l = this.getZoomInfo(t);
                if (!(l && r && a && o && s)) return void i();
                const {
                    x: c,
                    y: h,
                    scale: d,
                    opacity: u
                } = l, f = () => {
                    t.state !== lt.Closing && (u && (a.style.opacity = Math.max(Math.min(1, 1 - (1 - o.scale) / (1 - d)), 0) + ""), o.scale >= 1 && o.scale > o.targetScale - .1 && e(o))
                }, p = t => {
                    (t.scale < .99 || t.scale > 1.01) && !t.isDragging || (P(s, ut), a.style.opacity = "", t.off("endAnimation", p), t.off("touchStart", p), t.off("afterTransform", f), e(t))
                };
                o.on("endAnimation", p), o.on("touchStart", p), o.on("afterTransform", f), o.on(["error", "destroy"], (() => {
                    i()
                })), o.panTo({
                    x: c,
                    y: h,
                    scale: d,
                    friction: 0,
                    ignoreBounds: !0
                }), o.stop("current");
                const g = {
                    event: "mousemove" === o.panMode ? n.prevMouseMoveEvent || n.options.event : void 0
                },
                    m = this.optionFor(t, "initialSize");
                C(s, ut), n.hideLoading(t), "full" === m ? o.zoomToFull(g) : "cover" === m ? o.zoomToCover(g) : "max" === m ? o.zoomToMax(g) : o.reset(.172)
            }))
        }
        getZoomInfo(t) {
            const {
                el: e,
                imageEl: i,
                thumbEl: n,
                panzoom: s
            } = t, o = this.instance, a = o.container;
            if (!e || !i || !n || !s || tt(n) < 3 || !this.optionFor(t, "zoom") || !a || o.state === rt.Destroy) return !1;
            if ("0" === getComputedStyle(a).getPropertyValue("--f-images-zoom")) return !1;
            const r = window.visualViewport || null;
            if (1 !== (r ? r.scale : 1)) return !1;
            let {
                top: l,
                left: c,
                width: h,
                height: d
            } = n.getBoundingClientRect(), {
                top: u,
                left: f,
                fitWidth: p,
                fitHeight: g
            } = s.contentRect;
            if (!(h && d && p && g)) return !1;
            const m = s.container.getBoundingClientRect();
            f += m.left, u += m.top;
            const b = -1 * (f + .5 * p - (c + .5 * h)),
                v = -1 * (u + .5 * g - (l + .5 * d)),
                y = h / p;
            let w = this.option("zoomOpacity") || !1;
            return "auto" === w && (w = Math.abs(h / d - p / g) > .1), {
                x: b,
                y: v,
                scale: y,
                opacity: w
            }
        }
        attach() {
            const t = this,
                e = t.instance;
            e.on("Carousel.change", t.onChange), e.on("Carousel.createSlide", t.onCreateSlide), e.on("Carousel.removeSlide", t.onRemoveSlide), e.on("close", t.onClose)
        }
        detach() {
            const t = this,
                e = t.instance;
            e.off("Carousel.change", t.onChange), e.off("Carousel.createSlide", t.onCreateSlide), e.off("Carousel.removeSlide", t.onRemoveSlide), e.off("close", t.onClose)
        }
    }
    Object.defineProperty(ft, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {
            initialSize: "fit",
            Panzoom: {
                maxScale: 1
            },
            protected: !1,
            zoom: !0,
            zoomOpacity: "auto"
        }
    }), "function" == typeof SuppressedError && SuppressedError;
    const pt = "html",
        gt = "image",
        mt = "map",
        bt = "youtube",
        vt = "vimeo",
        yt = "html5video",
        wt = (t, e = {}) => {
            const i = new URL(t),
                n = new URLSearchParams(i.search),
                s = new URLSearchParams;
            for (const [t, i] of [...n, ...Object.entries(e)]) {
                let e = i + "";
                if ("t" === t) {
                    let t = e.match(/((\d*)m)?(\d*)s?/);
                    t && s.set("start", 60 * parseInt(t[2] || "0") + parseInt(t[3] || "0") + "")
                } else s.set(t, e)
            }
            let o = s + "",
                a = t.match(/#t=((.*)?\d+s)/);
            return a && (o += `#t=${a[1]}`), o
        },
        xt = {
            ajax: null,
            autoSize: !0,
            iframeAttr: {
                allow: "autoplay; fullscreen",
                scrolling: "auto"
            },
            preload: !0,
            videoAutoplay: !0,
            videoRatio: 16 / 9,
            videoTpl: '<video class="fancybox__html5video" playsinline controls controlsList="nodownload" poster="{{poster}}">\n  <source src="{{src}}" type="{{format}}" />Sorry, your browser doesn\'t support embedded videos.</video>',
            videoFormat: "",
            vimeo: {
                byline: 1,
                color: "00adef",
                controls: 1,
                dnt: 1,
                muted: 0
            },
            youtube: {
                controls: 1,
                enablejsapi: 1,
                nocookie: 1,
                rel: 0,
                fs: 1
            }
        },
        Et = ["image", "html", "ajax", "inline", "clone", "iframe", "map", "pdf", "html5video", "youtube", "vimeo"];
    class St extends _ {
        onBeforeInitSlide(t, e, i) {
            this.processType(i)
        }
        onCreateSlide(t, e, i) {
            this.setContent(i)
        }
        onClearContent(t, e) {
            e.xhr && (e.xhr.abort(), e.xhr = null);
            const i = e.iframeEl;
            i && (i.onload = i.onerror = null, i.src = "//about:blank", e.iframeEl = null);
            const n = e.contentEl,
                s = e.placeholderEl;
            if ("inline" === e.type && n && s) n.classList.remove("fancybox__content"), "none" !== n.style.display && (n.style.display = "none"), s.parentNode && s.parentNode.insertBefore(n, s), s.remove(), e.contentEl = void 0, e.placeholderEl = void 0;
            else
                for (; e.el && e.el.firstChild;) e.el.removeChild(e.el.firstChild)
        }
        onSelectSlide(t, e, i) {
            i.state === lt.Ready && this.playVideo()
        }
        onUnselectSlide(t, e, i) {
            var n, s;
            if (i.type === yt) {
                try {
                    null === (s = null === (n = i.el) || void 0 === n ? void 0 : n.querySelector("video")) || void 0 === s || s.pause()
                } catch (t) { }
                return
            }
            let o;
            i.type === vt ? o = {
                method: "pause",
                value: "true"
            } : i.type === bt && (o = {
                event: "command",
                func: "pauseVideo"
            }), o && i.iframeEl && i.iframeEl.contentWindow && i.iframeEl.contentWindow.postMessage(JSON.stringify(o), "*"), i.poller && clearTimeout(i.poller)
        }
        onDone(t, e) {
            t.isCurrentSlide(e) && !t.isClosing() && this.playVideo()
        }
        onRefresh(t, e) {
            e.slides.forEach((t => {
                t.el && (this.resizeIframe(t), this.setAspectRatio(t))
            }))
        }
        onMessage(t) {
            try {
                let e = JSON.parse(t.data);
                if ("https://player.vimeo.com" === t.origin) {
                    if ("ready" === e.event)
                        for (let e of Array.from(document.getElementsByClassName("fancybox__iframe"))) e instanceof HTMLIFrameElement && e.contentWindow === t.source && (e.dataset.ready = "true")
                } else if (t.origin.match(/^https:\/\/(www.)?youtube(-nocookie)?.com$/) && "onReady" === e.event) {
                    const t = document.getElementById(e.id);
                    t && (t.dataset.ready = "true")
                }
            } catch (t) { }
        }
        loadAjaxContent(t) {
            const e = this.instance.optionFor(t, "src") || "";
            this.instance.showLoading(t);
            const i = this.instance,
                n = new XMLHttpRequest;
            i.showLoading(t), n.onreadystatechange = function () {
                n.readyState === XMLHttpRequest.DONE && i.state === rt.Ready && (i.hideLoading(t), 200 === n.status ? i.setContent(t, n.responseText) : i.setError(t, 404 === n.status ? "{{AJAX_NOT_FOUND}}" : "{{AJAX_FORBIDDEN}}"))
            };
            const s = t.ajax || null;
            n.open(s ? "POST" : "GET", e + ""), n.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), n.setRequestHeader("X-Requested-With", "XMLHttpRequest"), n.send(s), t.xhr = n
        }
        setInlineContent(t) {
            let e = null;
            if (S(t.src)) e = t.src;
            else if ("string" == typeof t.src) {
                const i = t.src.split("#", 2).pop();
                e = i ? document.getElementById(i) : null
            }
            if (e) {
                if ("clone" === t.type || e.closest(".fancybox__slide")) {
                    e = e.cloneNode(!0);
                    const i = e.dataset.animationName;
                    i && (e.classList.remove(i), delete e.dataset.animationName);
                    let n = e.getAttribute("id");
                    n = n ? `${n}--clone` : `clone-${this.instance.id}-${t.index}`, e.setAttribute("id", n)
                } else if (e.parentNode) {
                    const i = document.createElement("div");
                    i.classList.add("fancybox-placeholder"), e.parentNode.insertBefore(i, e), t.placeholderEl = i
                }
                this.instance.setContent(t, e)
            } else this.instance.setError(t, "{{ELEMENT_NOT_FOUND}}")
        }
        setIframeContent(t) {
            const {
                src: e,
                el: i
            } = t;
            if (!e || "string" != typeof e || !i) return;
            i.classList.add("is-loading");
            const n = this.instance,
                s = document.createElement("iframe");
            s.className = "fancybox__iframe", s.setAttribute("id", `fancybox__iframe_${n.id}_${t.index}`);
            for (const [e, i] of Object.entries(this.optionFor(t, "iframeAttr") || {})) s.setAttribute(e, i);
            s.onerror = () => {
                n.setError(t, "{{IFRAME_ERROR}}")
            }, t.iframeEl = s;
            const o = this.optionFor(t, "preload");
            if ("iframe" !== t.type || !1 === o) return s.setAttribute("src", t.src + ""), n.setContent(t, s, !1), this.resizeIframe(t), void n.revealContent(t);
            n.showLoading(t), s.onload = () => {
                if (!s.src.length) return;
                const e = "true" !== s.dataset.ready;
                s.dataset.ready = "true", this.resizeIframe(t), e ? n.revealContent(t) : n.hideLoading(t)
            }, s.setAttribute("src", e), n.setContent(t, s, !1)
        }
        resizeIframe(t) {
            const {
                type: e,
                iframeEl: i
            } = t;
            if (e === bt || e === vt) return;
            const n = null == i ? void 0 : i.parentElement;
            if (!i || !n) return;
            let s = t.autoSize;
            void 0 === s && (s = this.optionFor(t, "autoSize"));
            let o = t.width || 0,
                a = t.height || 0;
            o && a && (s = !1);
            const r = n && n.style;
            if (!1 !== t.preload && !1 !== s && r) try {
                const t = window.getComputedStyle(n),
                    e = parseFloat(t.paddingLeft) + parseFloat(t.paddingRight),
                    s = parseFloat(t.paddingTop) + parseFloat(t.paddingBottom),
                    l = i.contentWindow;
                if (l) {
                    const t = l.document,
                        i = t.getElementsByTagName(pt)[0],
                        n = t.body;
                    r.width = "", n.style.overflow = "hidden", o = o || i.scrollWidth + e, r.width = `${o}px`, n.style.overflow = "", r.flex = "0 0 auto", r.height = `${n.scrollHeight}px`, a = i.scrollHeight + s
                }
            } catch (t) { }
            if (o || a) {
                const t = {
                    flex: "0 1 auto",
                    width: "",
                    height: ""
                };
                o && "auto" !== o && (t.width = `${o}px`), a && "auto" !== a && (t.height = `${a}px`), Object.assign(r, t)
            }
        }
        playVideo() {
            const t = this.instance.getSlide();
            if (!t) return;
            const {
                el: e
            } = t;
            if (!e || !e.offsetParent) return;
            if (!this.optionFor(t, "videoAutoplay")) return;
            if (t.type === yt) try {
                const t = e.querySelector("video");
                if (t) {
                    const e = t.play();
                    void 0 !== e && e.then((() => { })).catch((e => {
                        t.muted = !0, t.play()
                    }))
                }
            } catch (t) { }
            if (t.type !== bt && t.type !== vt) return;
            const i = () => {
                if (t.iframeEl && t.iframeEl.contentWindow) {
                    let e;
                    if ("true" === t.iframeEl.dataset.ready) return e = t.type === bt ? {
                        event: "command",
                        func: "playVideo"
                    } : {
                        method: "play",
                        value: "true"
                    }, e && t.iframeEl.contentWindow.postMessage(JSON.stringify(e), "*"), void (t.poller = void 0);
                    t.type === bt && (e = {
                        event: "listening",
                        id: t.iframeEl.getAttribute("id")
                    }, t.iframeEl.contentWindow.postMessage(JSON.stringify(e), "*"))
                }
                t.poller = setTimeout(i, 250)
            };
            i()
        }
        processType(t) {
            if (t.html) return t.type = pt, t.src = t.html, void (t.html = "");
            const e = this.instance.optionFor(t, "src", "");
            if (!e || "string" != typeof e) return;
            let i = t.type,
                n = null;
            if (n = e.match(/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|shorts\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)) {
                const s = this.optionFor(t, bt),
                    {
                        nocookie: o
                    } = s,
                    a = function (t, e) {
                        var i = {};
                        for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && e.indexOf(n) < 0 && (i[n] = t[n]);
                        if (null != t && "function" == typeof Object.getOwnPropertySymbols) {
                            var s = 0;
                            for (n = Object.getOwnPropertySymbols(t); s < n.length; s++) e.indexOf(n[s]) < 0 && Object.prototype.propertyIsEnumerable.call(t, n[s]) && (i[n[s]] = t[n[s]])
                        }
                        return i
                    }(s, ["nocookie"]),
                    r = `www.youtube${o ? "-nocookie" : ""}.com`,
                    l = wt(e, a),
                    c = encodeURIComponent(n[2]);
                t.videoId = c, t.src = `https://${r}/embed/${c}?${l}`, t.thumbSrc = t.thumbSrc || `https://i.ytimg.com/vi/${c}/mqdefault.jpg`, i = bt
            } else if (n = e.match(/^.+vimeo.com\/(?:\/)?([\d]+)((\/|\?h=)([a-z0-9]+))?(.*)?/)) {
                const s = wt(e, this.optionFor(t, vt)),
                    o = encodeURIComponent(n[1]),
                    a = n[4] || "";
                t.videoId = o, t.src = `https://player.vimeo.com/video/${o}?${a ? `h=${a}${s ? "&" : ""}` : ""}${s}`, i = vt
            }
            if (!i && t.triggerEl) {
                const e = t.triggerEl.dataset.type;
                Et.includes(e) && (i = e)
            }
            i || "string" == typeof e && ("#" === e.charAt(0) ? i = "inline" : (n = e.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i)) ? (i = yt, t.videoFormat = t.videoFormat || "video/" + ("ogv" === n[1] ? "ogg" : n[1])) : e.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ? i = gt : e.match(/\.(pdf)((\?|#).*)?$/i) && (i = "pdf")), (n = e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:(?:(?:maps\/(?:place\/(?:.*)\/)?\@(.*),(\d+.?\d+?)z))|(?:\?ll=))(.*)?/i)) ? (t.src = `https://maps.google.${n[1]}/?ll=${(n[2] ? n[2] + "&z=" + Math.floor(parseFloat(n[3])) + (n[4] ? n[4].replace(/^\//, "&") : "") : n[4] + "").replace(/\?/, "&")}&output=${n[4] && n[4].indexOf("layer=c") > 0 ? "svembed" : "embed"}`, i = mt) : (n = e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i)) && (t.src = `https://maps.google.${n[1]}/maps?q=${n[2].replace("query=", "q=").replace("api=1", "")}&output=embed`, i = mt), i = i || this.instance.option("defaultType"), t.type = i, i === gt && (t.thumbSrc = t.thumbSrc || t.src)
        }
        setContent(t) {
            const e = this.instance.optionFor(t, "src") || "";
            if (t && t.type && e) {
                switch (t.type) {
                    case pt:
                        this.instance.setContent(t, e);
                        break;
                    case yt:
                        const i = this.option("videoTpl");
                        i && this.instance.setContent(t, i.replace(/\{\{src\}\}/gi, e + "").replace(/\{\{format\}\}/gi, this.optionFor(t, "videoFormat") || "").replace(/\{\{poster\}\}/gi, t.poster || t.thumbSrc || ""));
                        break;
                    case "inline":
                    case "clone":
                        this.setInlineContent(t);
                        break;
                    case "ajax":
                        this.loadAjaxContent(t);
                        break;
                    case "pdf":
                    case mt:
                    case bt:
                    case vt:
                        t.preload = !1;
                    case "iframe":
                        this.setIframeContent(t)
                }
                this.setAspectRatio(t)
            }
        }
        setAspectRatio(t) {
            const e = t.contentEl;
            if (!(t.el && e && t.type && [bt, vt, yt].includes(t.type))) return;
            let i, n = t.width || "auto",
                s = t.height || "auto";
            if ("auto" === n || "auto" === s) {
                i = this.optionFor(t, "videoRatio");
                const e = (i + "").match(/(\d+)\s*\/\s?(\d+)/);
                i = e && e.length > 2 ? parseFloat(e[1]) / parseFloat(e[2]) : parseFloat(i + "")
            } else n && s && (i = n / s);
            if (!i) return;
            e.style.aspectRatio = "", e.style.width = "", e.style.height = "", e.offsetHeight;
            const o = e.getBoundingClientRect(),
                a = o.width || 1,
                r = o.height || 1;
            e.style.aspectRatio = i + "", i < a / r ? (s = "auto" === s ? r : Math.min(r, s), e.style.width = "auto", e.style.height = `${s}px`) : (n = "auto" === n ? a : Math.min(a, n), e.style.width = `${n}px`, e.style.height = "auto")
        }
        attach() {
            const t = this,
                e = t.instance;
            e.on("Carousel.beforeInitSlide", t.onBeforeInitSlide), e.on("Carousel.createSlide", t.onCreateSlide), e.on("Carousel.selectSlide", t.onSelectSlide), e.on("Carousel.unselectSlide", t.onUnselectSlide), e.on("Carousel.Panzoom.refresh", t.onRefresh), e.on("done", t.onDone), e.on("clearContent", t.onClearContent), window.addEventListener("message", t.onMessage)
        }
        detach() {
            const t = this,
                e = t.instance;
            e.off("Carousel.beforeInitSlide", t.onBeforeInitSlide), e.off("Carousel.createSlide", t.onCreateSlide), e.off("Carousel.selectSlide", t.onSelectSlide), e.off("Carousel.unselectSlide", t.onUnselectSlide), e.off("Carousel.Panzoom.refresh", t.onRefresh), e.off("done", t.onDone), e.off("clearContent", t.onClearContent), window.removeEventListener("message", t.onMessage)
        }
    }
    Object.defineProperty(St, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: xt
    });
    const Pt = "play",
        Ct = "pause",
        Tt = "ready";
    class Mt extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "state", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: Tt
            }), Object.defineProperty(this, "inHover", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "timer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "progressBar", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            })
        }
        get isActive() {
            return this.state !== Tt
        }
        onReady(t) {
            this.option("autoStart") && (t.isInfinite || t.page < t.pages.length - 1) && this.start()
        }
        onChange() {
            this.removeProgressBar(), this.pause()
        }
        onSettle() {
            this.resume()
        }
        onVisibilityChange() {
            "visible" === document.visibilityState ? this.resume() : this.pause()
        }
        onMouseEnter() {
            this.inHover = !0, this.pause()
        }
        onMouseLeave() {
            var t;
            this.inHover = !1, (null === (t = this.instance.panzoom) || void 0 === t ? void 0 : t.isResting) && this.resume()
        }
        onTimerEnd() {
            const t = this.instance;
            "play" === this.state && (t.isInfinite || t.page !== t.pages.length - 1 ? t.slideNext() : t.slideTo(0))
        }
        removeProgressBar() {
            this.progressBar && (this.progressBar.remove(), this.progressBar = null)
        }
        createProgressBar() {
            var t;
            if (!this.option("showProgress")) return null;
            this.removeProgressBar();
            const e = this.instance,
                i = (null === (t = e.pages[e.page]) || void 0 === t ? void 0 : t.slides) || [];
            let n = this.option("progressParentEl");
            if (n || (n = (1 === i.length ? i[0].el : null) || e.viewport), !n) return null;
            const s = document.createElement("div");
            return C(s, "f-progress"), n.prepend(s), this.progressBar = s, s.offsetHeight, s
        }
        set() {
            const t = this,
                e = t.instance;
            if (e.pages.length < 2) return;
            if (t.timer) return;
            const i = t.option("timeout");
            t.state = Pt, C(e.container, "has-autoplay");
            let n = t.createProgressBar();
            n && (n.style.transitionDuration = `${i}ms`, n.style.transform = "scaleX(1)"), t.timer = setTimeout((() => {
                t.timer = null, t.inHover || t.onTimerEnd()
            }), i), t.emit("set")
        }
        clear() {
            const t = this;
            t.timer && (clearTimeout(t.timer), t.timer = null), t.removeProgressBar()
        }
        start() {
            const t = this;
            if (t.set(), t.state !== Tt) {
                if (t.option("pauseOnHover")) {
                    const e = t.instance.container;
                    e.addEventListener("mouseenter", t.onMouseEnter, !1), e.addEventListener("mouseleave", t.onMouseLeave, !1)
                }
                document.addEventListener("visibilitychange", t.onVisibilityChange, !1), t.emit("start")
            }
        }
        stop() {
            const t = this,
                e = t.state,
                i = t.instance.container;
            t.clear(), t.state = Tt, i.removeEventListener("mouseenter", t.onMouseEnter, !1), i.removeEventListener("mouseleave", t.onMouseLeave, !1), document.removeEventListener("visibilitychange", t.onVisibilityChange, !1), P(i, "has-autoplay"), e !== Tt && t.emit("stop")
        }
        pause() {
            const t = this;
            t.state === Pt && (t.state = Ct, t.clear(), t.emit(Ct))
        }
        resume() {
            const t = this,
                e = t.instance;
            if (e.isInfinite || e.page !== e.pages.length - 1)
                if (t.state !== Pt) {
                    if (t.state === Ct && !t.inHover) {
                        const e = new Event("resume", {
                            bubbles: !0,
                            cancelable: !0
                        });
                        t.emit("resume", e), e.defaultPrevented || t.set()
                    }
                } else t.set();
            else t.stop()
        }
        toggle() {
            this.state === Pt || this.state === Ct ? this.stop() : this.start()
        }
        attach() {
            const t = this,
                e = t.instance;
            e.on("ready", t.onReady), e.on("Panzoom.startAnimation", t.onChange), e.on("Panzoom.endAnimation", t.onSettle), e.on("Panzoom.touchMove", t.onChange)
        }
        detach() {
            const t = this,
                e = t.instance;
            e.off("ready", t.onReady), e.off("Panzoom.startAnimation", t.onChange), e.off("Panzoom.endAnimation", t.onSettle), e.off("Panzoom.touchMove", t.onChange), t.stop()
        }
    }
    Object.defineProperty(Mt, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {
            autoStart: !0,
            pauseOnHover: !0,
            progressParentEl: null,
            showProgress: !0,
            timeout: 3e3
        }
    });
    class Ot extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "ref", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            })
        }
        onPrepare(t) {
            const e = t.carousel;
            if (!e) return;
            const i = t.container;
            i && (e.options.Autoplay = f({
                autoStart: !1
            }, this.option("Autoplay") || {}, {
                pauseOnHover: !1,
                timeout: this.option("timeout"),
                progressParentEl: () => this.option("progressParentEl") || null,
                on: {
                    start: () => {
                        t.emit("startSlideshow")
                    },
                    set: e => {
                        var n;
                        i.classList.add("has-slideshow"), (null === (n = t.getSlide()) || void 0 === n ? void 0 : n.state) !== lt.Ready && e.pause()
                    },
                    stop: () => {
                        i.classList.remove("has-slideshow"), t.isCompact || t.endIdle(), t.emit("endSlideshow")
                    },
                    resume: (e, i) => {
                        var n, s, o;
                        !i || !i.cancelable || (null === (n = t.getSlide()) || void 0 === n ? void 0 : n.state) === lt.Ready && (null === (o = null === (s = t.carousel) || void 0 === s ? void 0 : s.panzoom) || void 0 === o ? void 0 : o.isResting) || i.preventDefault()
                    }
                }
            }), e.attachPlugins({
                Autoplay: Mt
            }), this.ref = e.plugins.Autoplay)
        }
        onReady(t) {
            const e = t.carousel,
                i = this.ref;
            i && e && this.option("playOnStart") && (e.isInfinite || e.page < e.pages.length - 1) && i.start()
        }
        onDone(t, e) {
            const i = this.ref,
                n = t.carousel;
            if (!i || !n) return;
            const s = e.panzoom;
            s && s.on("startAnimation", (() => {
                t.isCurrentSlide(e) && i.stop()
            })), t.isCurrentSlide(e) && i.resume()
        }
        onKeydown(t, e) {
            var i;
            const n = this.ref;
            n && e === this.option("key") && "BUTTON" !== (null === (i = document.activeElement) || void 0 === i ? void 0 : i.nodeName) && n.toggle()
        }
        attach() {
            const t = this,
                e = t.instance;
            e.on("Carousel.init", t.onPrepare), e.on("Carousel.ready", t.onReady), e.on("done", t.onDone), e.on("keydown", t.onKeydown)
        }
        detach() {
            const t = this,
                e = t.instance;
            e.off("Carousel.init", t.onPrepare), e.off("Carousel.ready", t.onReady), e.off("done", t.onDone), e.off("keydown", t.onKeydown)
        }
    }
    Object.defineProperty(Ot, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: {
            key: " ",
            playOnStart: !1,
            progressParentEl: t => {
                var e;
                return (null === (e = t.instance.container) || void 0 === e ? void 0 : e.querySelector(".fancybox__toolbar [data-fancybox-toggle-slideshow]")) || t.instance.container
            },
            timeout: 3e3
        }
    });
    const At = {
        classes: {
            container: "f-thumbs f-carousel__thumbs",
            viewport: "f-thumbs__viewport",
            track: "f-thumbs__track",
            slide: "f-thumbs__slide",
            isResting: "is-resting",
            isSelected: "is-selected",
            isLoading: "is-loading",
            hasThumbs: "has-thumbs"
        },
        minCount: 2,
        parentEl: null,
        thumbTpl: '<button class="f-thumbs__slide__button" tabindex="0" type="button" aria-label="{{GOTO}}" data-carousel-index="%i"><img class="f-thumbs__slide__img" data-lazy-src="{{%s}}" alt="" /></button>',
        type: "modern"
    };
    var Lt;
    ! function (t) {
        t[t.Init = 0] = "Init", t[t.Ready = 1] = "Ready", t[t.Hidden = 2] = "Hidden"
    }(Lt || (Lt = {}));
    const zt = "isResting",
        Rt = "thumbWidth",
        kt = "thumbHeight",
        It = "thumbClipWidth";
    let Dt = class extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "type", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: "modern"
            }), Object.defineProperty(this, "container", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "track", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "carousel", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "thumbWidth", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "thumbClipWidth", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "thumbHeight", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "thumbGap", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "thumbExtraGap", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "state", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: Lt.Init
            })
        }
        get isModern() {
            return "modern" === this.type
        }
        onInitSlide(t, e) {
            const i = e.el ? e.el.dataset : void 0;
            i && (e.thumbSrc = i.thumbSrc || e.thumbSrc || "", e[It] = parseFloat(i[It] || "") || e[It] || 0, e[kt] = parseFloat(i.thumbHeight || "") || e[kt] || 0), this.addSlide(e)
        }
        onInitSlides() {
            this.build()
        }
        onChange() {
            var t;
            if (!this.isModern) return;
            const e = this.container,
                i = this.instance,
                n = i.panzoom,
                s = this.carousel,
                o = s ? s.panzoom : null,
                r = i.page;
            if (n && s && o) {
                if (n.isDragging) {
                    P(e, this.cn(zt));
                    let n = (null === (t = s.pages[r]) || void 0 === t ? void 0 : t.pos) || 0;
                    n += i.getProgress(r) * (this[It] + this.thumbGap);
                    let a = o.getBounds(); - 1 * n > a.x.min && -1 * n < a.x.max && o.panTo({
                        x: -1 * n,
                        friction: .12
                    })
                } else a(e, this.cn(zt), n.isResting);
                this.shiftModern()
            }
        }
        onRefresh() {
            this.updateProps();
            for (const t of this.instance.slides || []) this.resizeModernSlide(t);
            this.shiftModern()
        }
        isDisabled() {
            const t = this.option("minCount") || 0;
            if (t) {
                const e = this.instance;
                let i = 0;
                for (const t of e.slides || []) t.thumbSrc && i++;
                if (i < t) return !0
            }
            const e = this.option("type");
            return ["modern", "classic"].indexOf(e) < 0
        }
        getThumb(t) {
            const e = this.option("thumbTpl") || "";
            return {
                html: this.instance.localize(e, [
                    ["%i", t.index],
                    ["%d", t.index + 1],
                    ["%s", t.thumbSrc || "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"]
                ])
            }
        }
        addSlide(t) {
            const e = this.carousel;
            e && e.addSlide(t.index, this.getThumb(t))
        }
        getSlides() {
            const t = [];
            for (const e of this.instance.slides || []) t.push(this.getThumb(e));
            return t
        }
        resizeModernSlide(t) {
            this.isModern && (t[Rt] = t[It] && t[kt] ? Math.round(this[kt] * (t[It] / t[kt])) : this[Rt])
        }
        updateProps() {
            const t = this.container;
            if (!t) return;
            const e = e => parseFloat(getComputedStyle(t).getPropertyValue("--f-thumb-" + e)) || 0;
            this.thumbGap = e("gap"), this.thumbExtraGap = e("extra-gap"), this[Rt] = e("width") || 40, this[It] = e("clip-width") || 40, this[kt] = e("height") || 40
        }
        build() {
            const t = this;
            if (t.state !== Lt.Init) return;
            if (t.isDisabled()) return void t.emit("disabled");
            const e = t.instance,
                i = e.container,
                n = t.getSlides(),
                s = t.option("type");
            t.type = s;
            const o = t.option("parentEl"),
                a = t.cn("container"),
                r = t.cn("track");
            let l = null == o ? void 0 : o.querySelector("." + a);
            l || (l = document.createElement("div"), C(l, a), o ? o.appendChild(l) : i.after(l)), C(l, `is-${s}`), C(i, t.cn("hasThumbs")), t.container = l, t.updateProps();
            let c = l.querySelector("." + r);
            c || (c = document.createElement("div"), C(c, t.cn("track")), l.appendChild(c)), t.track = c;
            const h = f({}, {
                track: c,
                infinite: !1,
                center: !0,
                fill: "classic" === s,
                dragFree: !0,
                slidesPerPage: 1,
                transition: !1,
                preload: .25,
                friction: .12,
                Panzoom: {
                    maxVelocity: 0
                },
                Dots: !1,
                Navigation: !1,
                classes: {
                    container: "f-thumbs",
                    viewport: "f-thumbs__viewport",
                    track: "f-thumbs__track",
                    slide: "f-thumbs__slide"
                }
            }, t.option("Carousel") || {}, {
                Sync: {
                    target: e
                },
                slides: n
            }),
                d = new e.constructor(l, h);
            d.on("createSlide", ((e, i) => {
                t.setProps(i.index), t.emit("createSlide", i, i.el)
            })), d.on("ready", (() => {
                t.shiftModern(), t.emit("ready")
            })), d.on("refresh", (() => {
                t.shiftModern()
            })), d.on("Panzoom.click", ((e, i, n) => {
                t.onClick(n)
            })), t.carousel = d, t.state = Lt.Ready
        }
        onClick(t) {
            t.preventDefault(), t.stopPropagation();
            const e = this.instance,
                {
                    pages: i,
                    page: n
                } = e,
                s = t => {
                    if (t) {
                        const e = t.closest("[data-carousel-index]");
                        if (e) return [parseInt(e.dataset.carouselIndex || "", 10) || 0, e]
                    }
                    return [-1, void 0]
                },
                o = (t, e) => {
                    const i = document.elementFromPoint(t, e);
                    return i ? s(i) : [-1, void 0]
                };
            let [a, r] = s(t.target);
            if (a > -1) return;
            const l = this[It],
                c = t.clientX,
                h = t.clientY;
            let [d, u] = o(c - l, h), [f, p] = o(c + l, h);
            u && p ? (a = Math.abs(c - u.getBoundingClientRect().right) < Math.abs(c - p.getBoundingClientRect().left) ? d : f, a === n && (a = a === d ? f : d)) : u ? a = d : p && (a = f), a > -1 && i[a] && e.slideTo(a)
        }
        getShift(t) {
            var e;
            const i = this,
                {
                    instance: n
                } = i,
                s = i.carousel;
            if (!n || !s) return 0;
            const o = i[Rt],
                a = i[It],
                r = i.thumbGap,
                l = i.thumbExtraGap;
            if (!(null === (e = s.slides[t]) || void 0 === e ? void 0 : e.el)) return 0;
            const c = .5 * (o - a),
                h = n.pages.length - 1;
            let d = n.getProgress(0),
                u = n.getProgress(h),
                f = n.getProgress(t, !1, !0),
                p = 0,
                g = c + l + r;
            const m = d < 0 && d > -1,
                b = u > 0 && u < 1;
            return 0 === t ? (p = g * Math.abs(d), b && 1 === d && (p -= g * Math.abs(u))) : t === h ? (p = g * Math.abs(u) * -1, m && -1 === u && (p += g * Math.abs(d))) : m || b ? (p = -1 * g, p += g * Math.abs(d), p += g * (1 - Math.abs(u))) : p = g * f, p
        }
        setProps(t) {
            var i;
            const n = this;
            if (!n.isModern) return;
            const {
                instance: s
            } = n, o = n.carousel;
            if (s && o) {
                const a = null === (i = o.slides[t]) || void 0 === i ? void 0 : i.el;
                if (a && a.childNodes.length) {
                    let i = e(1 - Math.abs(s.getProgress(t))),
                        o = e(n.getShift(t));
                    a.style.setProperty("--progress", i ? i + "" : ""), a.style.setProperty("--shift", o + "")
                }
            }
        }
        shiftModern() {
            const t = this;
            if (!t.isModern) return;
            const {
                instance: e,
                track: i
            } = t, n = e.panzoom, s = t.carousel;
            if (!(e && i && n && s)) return;
            if (n.state === b.Init || n.state === b.Destroy) return;
            for (const i of e.slides) t.setProps(i.index);
            let o = (t[It] + t.thumbGap) * (s.slides.length || 0);
            i.style.setProperty("--width", o + "")
        }
        cleanup() {
            const t = this;
            t.carousel && t.carousel.destroy(), t.carousel = null, t.container && t.container.remove(), t.container = null, t.track && t.track.remove(), t.track = null, t.state = Lt.Init, P(t.instance.container, t.cn("hasThumbs"))
        }
        attach() {
            const t = this,
                e = t.instance;
            e.on("initSlide", t.onInitSlide), e.state === H.Init ? e.on("initSlides", t.onInitSlides) : t.onInitSlides(), e.on(["change", "Panzoom.afterTransform"], t.onChange), e.on("Panzoom.refresh", t.onRefresh)
        }
        detach() {
            const t = this,
                e = t.instance;
            e.off("initSlide", t.onInitSlide), e.off("initSlides", t.onInitSlides), e.off(["change", "Panzoom.afterTransform"], t.onChange), e.off("Panzoom.refresh", t.onRefresh), t.cleanup()
        }
    };
    Object.defineProperty(Dt, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: At
    });
    const Ft = Object.assign(Object.assign({}, At), {
        key: "t",
        showOnStart: !0,
        parentEl: null
    }),
        jt = "is-masked",
        Ht = "aria-hidden";
    class Bt extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "ref", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "hidden", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            })
        }
        get isEnabled() {
            const t = this.ref;
            return t && !t.isDisabled()
        }
        get isHidden() {
            return this.hidden
        }
        onClick(t, e) {
            e.stopPropagation()
        }
        onCreateSlide(t, e) {
            var i, n, s;
            const o = (null === (s = null === (n = null === (i = this.instance) || void 0 === i ? void 0 : i.carousel) || void 0 === n ? void 0 : n.slides[e.index]) || void 0 === s ? void 0 : s.type) || "",
                a = e.el;
            if (a && o) {
                let t = `for-${o}`;
                ["video", "youtube", "vimeo", "html5video"].includes(o) && (t += " for-video"), C(a, t)
            }
        }
        onInit() {
            var t;
            const e = this,
                i = e.instance,
                n = i.carousel;
            if (e.ref || !n) return;
            const s = e.option("parentEl") || i.footer || i.container;
            if (!s) return;
            const o = f({}, e.options, {
                parentEl: s,
                classes: {
                    container: "f-thumbs fancybox__thumbs"
                },
                Carousel: {
                    Sync: {
                        friction: i.option("Carousel.friction") || 0
                    }
                },
                on: {
                    ready: t => {
                        const i = t.container;
                        i && this.hidden && (e.refresh(), i.style.transition = "none", e.hide(), i.offsetHeight, queueMicrotask((() => {
                            i.style.transition = "", e.show()
                        })))
                    }
                }
            });
            o.Carousel = o.Carousel || {}, o.Carousel.on = f((null === (t = e.options.Carousel) || void 0 === t ? void 0 : t.on) || {}, {
                click: this.onClick,
                createSlide: this.onCreateSlide
            }), n.options.Thumbs = o, n.attachPlugins({
                Thumbs: Dt
            }), e.ref = n.plugins.Thumbs, e.option("showOnStart") || (e.ref.state = Lt.Hidden, e.hidden = !0)
        }
        onResize() {
            var t;
            const e = null === (t = this.ref) || void 0 === t ? void 0 : t.container;
            e && (e.style.maxHeight = "")
        }
        onKeydown(t, e) {
            const i = this.option("key");
            i && i === e && this.toggle()
        }
        toggle() {
            const t = this.ref;
            if (t && !t.isDisabled()) return t.state === Lt.Hidden ? (t.state = Lt.Init, void t.build()) : void (this.hidden ? this.show() : this.hide())
        }
        show() {
            const t = this.ref;
            if (!t || t.isDisabled()) return;
            const e = t.container;
            e && (this.refresh(), e.offsetHeight, e.removeAttribute(Ht), e.classList.remove(jt), this.hidden = !1)
        }
        hide() {
            const t = this.ref,
                e = t && t.container;
            e && (this.refresh(), e.offsetHeight, e.classList.add(jt), e.setAttribute(Ht, "true")), this.hidden = !0
        }
        refresh() {
            const t = this.ref;
            if (!t || !t.state) return;
            const e = t.container,
                i = (null == e ? void 0 : e.firstChild) || null;
            e && i && i.childNodes.length && (e.style.maxHeight = `${i.getBoundingClientRect().height}px`)
        }
        attach() {
            const t = this,
                e = t.instance;
            e.state === rt.Init ? e.on("Carousel.init", t.onInit) : t.onInit(), e.on("resize", t.onResize), e.on("keydown", t.onKeydown)
        }
        detach() {
            var t;
            const e = this,
                i = e.instance;
            i.off("Carousel.init", e.onInit), i.off("resize", e.onResize), i.off("keydown", e.onKeydown), null === (t = i.carousel) || void 0 === t || t.detachPlugins(["Thumbs"]), e.ref = null
        }
    }
    Object.defineProperty(Bt, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: Ft
    });
    const Nt = {
        panLeft: {
            icon: '<svg><path d="M5 12h14M5 12l6 6M5 12l6-6"/></svg>',
            change: {
                panX: -100
            }
        },
        panRight: {
            icon: '<svg><path d="M5 12h14M13 18l6-6M13 6l6 6"/></svg>',
            change: {
                panX: 100
            }
        },
        panUp: {
            icon: '<svg><path d="M12 5v14M18 11l-6-6M6 11l6-6"/></svg>',
            change: {
                panY: -100
            }
        },
        panDown: {
            icon: '<svg><path d="M12 5v14M18 13l-6 6M6 13l6 6"/></svg>',
            change: {
                panY: 100
            }
        },
        zoomIn: {
            icon: '<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M11 8v6M8 11h6"/></svg>',
            action: "zoomIn"
        },
        zoomOut: {
            icon: '<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',
            action: "zoomOut"
        },
        toggle1to1: {
            icon: '<svg><path d="M3.51 3.07c5.74.02 11.48-.02 17.22.02 1.37.1 2.34 1.64 2.18 3.13 0 4.08.02 8.16 0 12.23-.1 1.54-1.47 2.64-2.79 2.46-5.61-.01-11.24.02-16.86-.01-1.36-.12-2.33-1.65-2.17-3.14 0-4.07-.02-8.16 0-12.23.1-1.36 1.22-2.48 2.42-2.46Z"/><path d="M5.65 8.54h1.49v6.92m8.94-6.92h1.49v6.92M11.5 9.4v.02m0 5.18v0"/></svg>',
            action: "toggleZoom"
        },
        toggleZoom: {
            icon: '<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',
            action: "toggleZoom"
        },
        iterateZoom: {
            icon: '<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',
            action: "iterateZoom"
        },
        rotateCCW: {
            icon: '<svg><path d="M15 4.55a8 8 0 0 0-6 14.9M9 15v5H4M18.37 7.16v.01M13 19.94v.01M16.84 18.37v.01M19.37 15.1v.01M19.94 11v.01"/></svg>',
            action: "rotateCCW"
        },
        rotateCW: {
            icon: '<svg><path d="M9 4.55a8 8 0 0 1 6 14.9M15 15v5h5M5.63 7.16v.01M4.06 11v.01M4.63 15.1v.01M7.16 18.37v.01M11 19.94v.01"/></svg>',
            action: "rotateCW"
        },
        flipX: {
            icon: '<svg style="stroke-width: 1.3"><path d="M12 3v18M16 7v10h5L16 7M8 7v10H3L8 7"/></svg>',
            action: "flipX"
        },
        flipY: {
            icon: '<svg style="stroke-width: 1.3"><path d="M3 12h18M7 16h10L7 21v-5M7 8h10L7 3v5"/></svg>',
            action: "flipY"
        },
        fitX: {
            icon: '<svg><path d="M4 12V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v6M10 18H3M21 18h-7M6 15l-3 3 3 3M18 15l3 3-3 3"/></svg>',
            action: "fitX"
        },
        fitY: {
            icon: '<svg><path d="M12 20H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h6M18 14v7M18 3v7M15 18l3 3 3-3M15 6l3-3 3 3"/></svg>',
            action: "fitY"
        },
        reset: {
            icon: '<svg><path d="M20 11A8.1 8.1 0 0 0 4.5 9M4 5v4h4M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"/></svg>',
            action: "reset"
        },
        toggleFS: {
            icon: '<svg><g><path d="M14.5 9.5 21 3m0 0h-6m6 0v6M3 21l6.5-6.5M3 21v-6m0 6h6"/></g><g><path d="m14 10 7-7m-7 7h6m-6 0V4M3 21l7-7m0 0v6m0-6H4"/></g></svg>',
            action: "toggleFS"
        }
    };
    var _t;
    ! function (t) {
        t[t.Init = 0] = "Init", t[t.Ready = 1] = "Ready", t[t.Disabled = 2] = "Disabled"
    }(_t || (_t = {}));
    const $t = {
        absolute: "auto",
        display: {
            left: ["infobar"],
            middle: [],
            right: ["iterateZoom", "slideshow", "fullscreen", "thumbs", "close"]
        },
        enabled: "auto",
        items: {
            infobar: {
                tpl: '<div class="fancybox__infobar" tabindex="-1"><span data-fancybox-current-index></span>/<span data-fancybox-count></span></div>'
            },
            download: {
                tpl: '<a class="f-button" title="{{DOWNLOAD}}" data-fancybox-download href="javasript:;"><svg><path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M7 11l5 5 5-5M12 4v12"/></svg></a>'
            },
            prev: {
                tpl: '<button class="f-button" title="{{PREV}}" data-fancybox-prev><svg><path d="m15 6-6 6 6 6"/></svg></button>'
            },
            next: {
                tpl: '<button class="f-button" title="{{NEXT}}" data-fancybox-next><svg><path d="m9 6 6 6-6 6"/></svg></button>'
            },
            slideshow: {
                tpl: '<button class="f-button" title="{{TOGGLE_SLIDESHOW}}" data-fancybox-toggle-slideshow><svg><g><path d="M8 4v16l13 -8z"></path></g><g><path d="M8 4v15M17 4v15"/></g></svg></button>'
            },
            fullscreen: {
                tpl: '<button class="f-button" title="{{TOGGLE_FULLSCREEN}}" data-fancybox-toggle-fullscreen><svg><g><path d="M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2M16 4h2a2 2 0 0 1 2 2v2M16 20h2a2 2 0 0 0 2-2v-2"/></g><g><path d="M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5"/></g></svg></button>'
            },
            thumbs: {
                tpl: '<button class="f-button" title="{{TOGGLE_THUMBS}}" data-fancybox-toggle-thumbs><svg><circle cx="5.5" cy="5.5" r="1"/><circle cx="12" cy="5.5" r="1"/><circle cx="18.5" cy="5.5" r="1"/><circle cx="5.5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="18.5" cy="12" r="1"/><circle cx="5.5" cy="18.5" r="1"/><circle cx="12" cy="18.5" r="1"/><circle cx="18.5" cy="18.5" r="1"/></svg></button>'
            },
            close: {
                tpl: '<button class="f-button" title="{{CLOSE}}" data-fancybox-close><svg><path d="m19.5 4.5-15 15M4.5 4.5l15 15"/></svg></button>'
            }
        },
        parentEl: null
    },
        Wt = {
            tabindex: "-1",
            width: "24",
            height: "24",
            viewBox: "0 0 24 24",
            xmlns: "http://www.w3.org/2000/svg"
        },
        Xt = "has-toolbar",
        qt = "fancybox__toolbar";
    class Yt extends _ {
        constructor() {
            super(...arguments), Object.defineProperty(this, "state", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: _t.Init
            }), Object.defineProperty(this, "container", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            })
        }
        onReady(t) {
            var e;
            if (!t.carousel) return;
            let i = this.option("display"),
                n = this.option("absolute"),
                s = this.option("enabled");
            if ("auto" === s) {
                const t = this.instance.carousel;
                let e = 0;
                if (t)
                    for (const i of t.slides) (i.panzoom || "image" === i.type) && e++;
                e || (s = !1)
            }
            s || (i = void 0);
            let o = 0;
            const a = {
                left: [],
                middle: [],
                right: []
            };
            if (i)
                for (const t of ["left", "middle", "right"])
                    for (const n of i[t]) {
                        const i = this.createEl(n);
                        i && (null === (e = a[t]) || void 0 === e || e.push(i), o++)
                    }
            let r = null;
            if (o && (r = this.createContainer()), r) {
                for (const [t, e] of Object.entries(a)) {
                    const i = document.createElement("div");
                    C(i, qt + "__column is-" + t);
                    for (const t of e) i.appendChild(t);
                    "auto" !== n || "middle" !== t || e.length || (n = !0), r.appendChild(i)
                } !0 === n && C(r, "is-absolute"), this.state = _t.Ready, this.onRefresh()
            } else this.state = _t.Disabled
        }
        onClick(t) {
            var e, i;
            const n = this.instance,
                s = n.getSlide(),
                o = null == s ? void 0 : s.panzoom,
                a = t.target,
                r = a && S(a) ? a.dataset : null;
            if (!r) return;
            if (void 0 !== r.fancyboxToggleThumbs) return t.preventDefault(), t.stopPropagation(), void (null === (e = n.plugins.Thumbs) || void 0 === e || e.toggle());
            if (void 0 !== r.fancyboxToggleFullscreen) return t.preventDefault(), t.stopPropagation(), void this.instance.toggleFullscreen();
            if (void 0 !== r.fancyboxToggleSlideshow) {
                t.preventDefault(), t.stopPropagation();
                const e = null === (i = n.carousel) || void 0 === i ? void 0 : i.plugins.Autoplay;
                let s = e.isActive;
                return o && "mousemove" === o.panMode && !s && o.reset(), void (s ? e.stop() : e.start())
            }
            const l = r.panzoomAction,
                c = r.panzoomChange;
            if ((c || l) && (t.preventDefault(), t.stopPropagation()), c) {
                let t = {};
                try {
                    t = JSON.parse(c)
                } catch (t) { }
                o && o.applyChange(t)
            } else l && o && o[l] && o[l]()
        }
        onChange() {
            this.onRefresh()
        }
        onRefresh() {
            if (this.instance.isClosing()) return;
            const t = this.container;
            if (!t) return;
            const e = this.instance.getSlide();
            if (!e || e.state !== lt.Ready) return;
            const i = e && !e.error && e.panzoom;
            for (const e of t.querySelectorAll("[data-panzoom-action]")) i ? (e.removeAttribute("disabled"), e.removeAttribute("tabindex")) : (e.setAttribute("disabled", ""), e.setAttribute("tabindex", "-1"));
            let n = i && i.canZoomIn(),
                s = i && i.canZoomOut();
            for (const e of t.querySelectorAll('[data-panzoom-action="zoomIn"]')) n ? (e.removeAttribute("disabled"), e.removeAttribute("tabindex")) : (e.setAttribute("disabled", ""), e.setAttribute("tabindex", "-1"));
            for (const e of t.querySelectorAll('[data-panzoom-action="zoomOut"]')) s ? (e.removeAttribute("disabled"), e.removeAttribute("tabindex")) : (e.setAttribute("disabled", ""), e.setAttribute("tabindex", "-1"));
            for (const e of t.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')) {
                s || n ? (e.removeAttribute("disabled"), e.removeAttribute("tabindex")) : (e.setAttribute("disabled", ""), e.setAttribute("tabindex", "-1"));
                const t = e.querySelector("g");
                t && (t.style.display = n ? "" : "none")
            }
        }
        onDone(t, e) {
            var i;
            null === (i = e.panzoom) || void 0 === i || i.on("afterTransform", (() => {
                this.instance.isCurrentSlide(e) && this.onRefresh()
            })), this.instance.isCurrentSlide(e) && this.onRefresh()
        }
        createContainer() {
            const t = this.instance.container;
            if (!t) return null;
            const e = this.option("parentEl") || t;
            let i = e.querySelector("." + qt);
            return i || (i = document.createElement("div"), C(i, qt), e.prepend(i)), i.addEventListener("click", this.onClick, {
                passive: !1,
                capture: !0
            }), t && C(t, Xt), this.container = i, i
        }
        createEl(t) {
            const e = this.instance,
                i = e.carousel;
            if (!i) return null;
            if ("toggleFS" === t) return null;
            if ("fullscreen" === t && !ot()) return null;
            let n = null;
            const o = i.slides.length || 0;
            let a = 0,
                r = 0;
            for (const t of i.slides) (t.panzoom || "image" === t.type) && a++, ("image" === t.type || t.downloadSrc) && r++;
            if (o < 2 && ["infobar", "prev", "next"].includes(t)) return n;
            if (void 0 !== Nt[t] && !a) return null;
            if ("download" === t && !r) return null;
            if ("thumbs" === t) {
                const t = e.plugins.Thumbs;
                if (!t || !t.isEnabled) return null
            }
            if ("slideshow" === t) {
                if (!i.plugins.Autoplay || o < 2) return null
            }
            if (void 0 !== Nt[t]) {
                const e = Nt[t];
                n = document.createElement("button"), n.setAttribute("title", this.instance.localize(`{{${t.toUpperCase()}}}`)), C(n, "f-button"), e.action && (n.dataset.panzoomAction = e.action), e.change && (n.dataset.panzoomChange = JSON.stringify(e.change)), n.appendChild(s(this.instance.localize(e.icon)))
            } else {
                const e = (this.option("items") || [])[t];
                e && (n = s(this.instance.localize(e.tpl)), "function" == typeof e.click && n.addEventListener("click", (t => {
                    t.preventDefault(), t.stopPropagation(), "function" == typeof e.click && e.click.call(this, this, t)
                })))
            }
            const l = null == n ? void 0 : n.querySelector("svg");
            if (l)
                for (const [t, e] of Object.entries(Wt)) l.getAttribute(t) || l.setAttribute(t, String(e));
            return n
        }
        removeContainer() {
            const t = this.container;
            t && t.remove(), this.container = null, this.state = _t.Disabled;
            const e = this.instance.container;
            e && P(e, Xt)
        }
        attach() {
            const t = this,
                e = t.instance;
            e.on("Carousel.initSlides", t.onReady), e.on("done", t.onDone), e.on(["reveal", "Carousel.change"], t.onChange), t.onReady(t.instance)
        }
        detach() {
            const t = this,
                e = t.instance;
            e.off("Carousel.initSlides", t.onReady), e.off("done", t.onDone), e.off(["reveal", "Carousel.change"], t.onChange), t.removeContainer()
        }
    }
    Object.defineProperty(Yt, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: $t
    });
    const Vt = {
        Hash: ht,
        Html: St,
        Images: ft,
        Slideshow: Ot,
        Thumbs: Bt,
        Toolbar: Yt
    },
        Zt = "with-fancybox",
        Ut = "hide-scrollbar",
        Gt = "--fancybox-scrollbar-compensate",
        Kt = "--fancybox-body-margin",
        Jt = "aria-hidden",
        Qt = "is-using-tab",
        te = "is-animated",
        ee = "is-compact",
        ie = "is-loading",
        ne = "is-opening",
        se = "has-caption",
        oe = "disabled",
        ae = "tabindex",
        re = "download",
        le = "href",
        ce = "src",
        he = t => "string" == typeof t,
        de = function () {
            var t = window.getSelection();
            return !!t && "Range" === t.type
        };
    let ue, fe = null,
        pe = null,
        ge = 0,
        me = 0;
    const be = new Map;
    let ve = 0;
    class ye extends m {
        get isIdle() {
            return this.idle
        }
        get isCompact() {
            return this.option("compact")
        }
        constructor(t = [], e = {}, i = {}) {
            super(e), Object.defineProperty(this, "userSlides", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: []
            }), Object.defineProperty(this, "userPlugins", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: {}
            }), Object.defineProperty(this, "idle", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "idleTimer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "clickTimer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "pwt", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "ignoreFocusChange", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "startedFs", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: !1
            }), Object.defineProperty(this, "state", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: rt.Init
            }), Object.defineProperty(this, "id", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: 0
            }), Object.defineProperty(this, "container", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "caption", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "footer", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "carousel", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "lastFocus", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: null
            }), Object.defineProperty(this, "prevMouseMoveEvent", {
                enumerable: !0,
                configurable: !0,
                writable: !0,
                value: void 0
            }), ue || (ue = ot()), this.id = e.id || ++ve, be.set(this.id, this), this.userSlides = t, this.userPlugins = i, queueMicrotask((() => {
                this.init()
            }))
        }
        init() {
            if (this.state === rt.Destroy) return;
            this.state = rt.Init, this.attachPlugins(Object.assign(Object.assign({}, ye.Plugins), this.userPlugins)), this.emit("init"), this.emit("attachPlugins"), !0 === this.option("hideScrollbar") && (() => {
                if (!et) return;
                const t = document,
                    e = t.body,
                    i = t.documentElement;
                if (e.classList.contains(Ut)) return;
                let n = window.innerWidth - i.getBoundingClientRect().width;
                const s = parseFloat(window.getComputedStyle(e).marginRight);
                n < 0 && (n = 0), i.style.setProperty(Gt, `${n}px`), s && e.style.setProperty(Kt, `${s}px`), e.classList.add(Ut)
            })(), this.initLayout(), this.scale();
            const t = () => {
                this.initCarousel(this.userSlides), this.state = rt.Ready, this.attachEvents(), this.emit("ready"), setTimeout((() => {
                    this.container && this.container.setAttribute(Jt, "false")
                }), 16)
            };
            this.option("Fullscreen.autoStart") && ue && !ue.isFullscreen() ? ue.request().then((() => {
                this.startedFs = !0, t()
            })).catch((() => t())) : t()
        }
        initLayout() {
            var t, e;
            const i = this.option("parentEl") || document.body,
                n = s(this.localize(this.option("tpl.main") || ""));
            n && (n.setAttribute("id", `fancybox-${this.id}`), n.setAttribute("aria-label", this.localize("{{MODAL}}")), n.classList.toggle(ee, this.isCompact), C(n, this.option("mainClass") || ""), C(n, ne), this.container = n, this.footer = n.querySelector(".fancybox__footer"), i.appendChild(n), C(document.documentElement, Zt), fe && pe || (fe = document.createElement("span"), C(fe, "fancybox-focus-guard"), fe.setAttribute(ae, "0"), fe.setAttribute(Jt, "true"), fe.setAttribute("aria-label", "Focus guard"), pe = fe.cloneNode(), null === (t = n.parentElement) || void 0 === t || t.insertBefore(fe, n), null === (e = n.parentElement) || void 0 === e || e.append(pe)), n.addEventListener("mousedown", (t => {
                ge = t.pageX, me = t.pageY, P(n, Qt)
            })), this.option("animated") && (C(n, te), setTimeout((() => {
                this.isClosing() || P(n, te)
            }), 350)), this.emit("initLayout"))
        }
        initCarousel(t) {
            const e = this.container;
            if (!e) return;
            const n = e.querySelector(".fancybox__carousel");
            if (!n) return;
            const s = this.carousel = new Q(n, f({}, {
                slides: t,
                transition: "fade",
                Panzoom: {
                    lockAxis: this.option("dragToClose") ? "xy" : "x",
                    infinite: !!this.option("dragToClose") && "y"
                },
                Dots: !1,
                Navigation: {
                    classes: {
                        container: "fancybox__nav",
                        button: "f-button",
                        isNext: "is-next",
                        isPrev: "is-prev"
                    }
                },
                initialPage: this.option("startIndex"),
                l10n: this.option("l10n")
            }, this.option("Carousel") || {}));
            s.on("*", ((t, e, ...i) => {
                this.emit(`Carousel.${e}`, t, ...i)
            })), s.on(["ready", "change"], (() => {
                this.manageCaption()
            })), this.on("Carousel.removeSlide", ((t, e, i) => {
                this.clearContent(i), i.state = void 0
            })), s.on("Panzoom.touchStart", (() => {
                var t, e;
                this.isCompact || this.endIdle(), (null === (t = document.activeElement) || void 0 === t ? void 0 : t.closest(".f-thumbs")) && (null === (e = this.container) || void 0 === e || e.focus())
            })), s.on("settle", (() => {
                this.idleTimer || this.isCompact || !this.option("idle") || this.setIdle(), this.option("autoFocus") && !this.isClosing && this.checkFocus()
            })), this.option("dragToClose") && (s.on("Panzoom.afterTransform", ((t, e) => {
                const n = this.getSlide();
                if (n && i(n.el)) return;
                const s = this.container;
                if (s) {
                    const t = Math.abs(e.current.f),
                        i = t < 1 ? "" : Math.max(.5, Math.min(1, 1 - t / e.contentRect.fitHeight * 1.5));
                    s.style.setProperty("--fancybox-ts", i ? "0s" : ""), s.style.setProperty("--fancybox-opacity", i + "")
                }
            })), s.on("Panzoom.touchEnd", ((t, e, n) => {
                var s;
                const o = this.getSlide();
                if (o && i(o.el)) return;
                if (e.isMobile && document.activeElement && -1 !== ["TEXTAREA", "INPUT"].indexOf(null === (s = document.activeElement) || void 0 === s ? void 0 : s.nodeName)) return;
                const a = Math.abs(e.dragOffset.y);
                "y" === e.lockedAxis && (a >= 200 || a >= 50 && e.dragOffset.time < 300) && (n && n.cancelable && n.preventDefault(), this.close(n, "f-throwOut" + (e.current.f < 0 ? "Up" : "Down")))
            }))), s.on("change", (t => {
                var e;
                let i = null === (e = this.getSlide()) || void 0 === e ? void 0 : e.triggerEl;
                if (i) {
                    const e = new CustomEvent("slideTo", {
                        bubbles: !0,
                        cancelable: !0,
                        detail: t.page
                    });
                    i.dispatchEvent(e)
                }
            })), s.on(["refresh", "change"], (t => {
                const e = this.container;
                if (!e) return;
                for (const i of e.querySelectorAll("[data-fancybox-current-index]")) i.innerHTML = t.page + 1;
                for (const i of e.querySelectorAll("[data-fancybox-count]")) i.innerHTML = t.pages.length;
                if (!t.isInfinite) {
                    for (const i of e.querySelectorAll("[data-fancybox-next]")) t.page < t.pages.length - 1 ? (i.removeAttribute(oe), i.removeAttribute(ae)) : (i.setAttribute(oe, ""), i.setAttribute(ae, "-1"));
                    for (const i of e.querySelectorAll("[data-fancybox-prev]")) t.page > 0 ? (i.removeAttribute(oe), i.removeAttribute(ae)) : (i.setAttribute(oe, ""), i.setAttribute(ae, "-1"))
                }
                const i = this.getSlide();
                if (!i) return;
                let n = i.downloadSrc || "";
                n || "image" !== i.type || i.error || !he(i[ce]) || (n = i[ce]);
                for (const t of e.querySelectorAll("[data-fancybox-download]")) {
                    const e = i.downloadFilename;
                    n ? (t.removeAttribute(oe), t.removeAttribute(ae), t.setAttribute(le, n), t.setAttribute(re, e || n), t.setAttribute("target", "_blank")) : (t.setAttribute(oe, ""), t.setAttribute(ae, "-1"), t.removeAttribute(le), t.removeAttribute(re))
                }
            })), this.emit("initCarousel")
        }
        attachEvents() {
            const t = this,
                e = t.container;
            if (!e) return;
            e.addEventListener("click", t.onClick, {
                passive: !1,
                capture: !1
            }), e.addEventListener("wheel", t.onWheel, {
                passive: !1,
                capture: !1
            }), document.addEventListener("keydown", t.onKeydown, {
                passive: !1,
                capture: !0
            }), document.addEventListener("visibilitychange", t.onVisibilityChange, !1), document.addEventListener("mousemove", t.onMousemove), t.option("trapFocus") && document.addEventListener("focus", t.onFocus, !0), window.addEventListener("resize", t.onResize);
            const i = window.visualViewport;
            i && (i.addEventListener("scroll", t.onResize), i.addEventListener("resize", t.onResize))
        }
        detachEvents() {
            const t = this,
                e = t.container;
            if (!e) return;
            document.removeEventListener("keydown", t.onKeydown, {
                passive: !1,
                capture: !0
            }), e.removeEventListener("wheel", t.onWheel, {
                passive: !1,
                capture: !1
            }), e.removeEventListener("click", t.onClick, {
                passive: !1,
                capture: !1
            }), document.removeEventListener("mousemove", t.onMousemove), window.removeEventListener("resize", t.onResize);
            const i = window.visualViewport;
            i && (i.removeEventListener("resize", t.onResize), i.removeEventListener("scroll", t.onResize)), document.removeEventListener("visibilitychange", t.onVisibilityChange, !1), document.removeEventListener("focus", t.onFocus, !0)
        }
        scale() {
            const t = this.container;
            if (!t) return;
            const e = window.visualViewport,
                i = Math.max(1, (null == e ? void 0 : e.scale) || 1);
            let n = "",
                s = "",
                o = "";
            if (e && i > 1) {
                let t = `${e.offsetLeft}px`,
                    a = `${e.offsetTop}px`;
                n = e.width * i + "px", s = e.height * i + "px", o = `translate3d(${t}, ${a}, 0) scale(${1 / i})`
            }
            t.style.transform = o, t.style.width = n, t.style.height = s
        }
        onClick(t) {
            var e;
            const {
                container: i,
                isCompact: n
            } = this;
            if (!i || this.isClosing()) return;
            !n && this.option("idle") && this.resetIdle();
            const s = t.composedPath()[0];
            if (s.closest(".fancybox-spinner") || s.closest("[data-fancybox-close]")) return t.preventDefault(), void this.close(t);
            if (s.closest("[data-fancybox-prev]")) return t.preventDefault(), void this.prev();
            if (s.closest("[data-fancybox-next]")) return t.preventDefault(), void this.next();
            if ("click" === t.type && 0 === t.detail) return;
            if (Math.abs(t.pageX - ge) > 30 || Math.abs(t.pageY - me) > 30) return;
            const o = document.activeElement;
            if (de() && o && i.contains(o)) return;
            if (n && "image" === (null === (e = this.getSlide()) || void 0 === e ? void 0 : e.type)) return void (this.clickTimer ? (clearTimeout(this.clickTimer), this.clickTimer = null) : this.clickTimer = setTimeout((() => {
                this.toggleIdle(), this.clickTimer = null
            }), 350));
            if (this.emit("click", t), t.defaultPrevented) return;
            let a = !1;
            if (s.closest(".fancybox__content")) {
                if (o) {
                    if (o.closest("[contenteditable]")) return;
                    s.matches(nt) || o.blur()
                }
                if (de()) return;
                a = this.option("contentClick")
            } else s.closest(".fancybox__carousel") && !s.matches(nt) && (a = this.option("backdropClick"));
            "close" === a ? (t.preventDefault(), this.close(t)) : "next" === a ? (t.preventDefault(), this.next()) : "prev" === a && (t.preventDefault(), this.prev())
        }
        onWheel(t) {
            const e = t.target;
            let i = this.option("wheel", t);
            e.closest(".fancybox__thumbs") && (i = "slide");
            const s = "slide" === i,
                o = [-t.deltaX || 0, -t.deltaY || 0, -t.detail || 0].reduce((function (t, e) {
                    return Math.abs(e) > Math.abs(t) ? e : t
                })),
                a = Math.max(-1, Math.min(1, o)),
                r = Date.now();
            this.pwt && r - this.pwt < 300 ? s && t.preventDefault() : (this.pwt = r, this.emit("wheel", t, a), t.defaultPrevented || ("close" === i ? (t.preventDefault(), this.close(t)) : "slide" === i && (n(e) || (t.preventDefault(), this[a > 0 ? "prev" : "next"]()))))
        }
        onKeydown(t) {
            if (!this.isTopmost()) return;
            this.isCompact || !this.option("idle") || this.isClosing() || this.resetIdle();
            const e = t.key,
                i = this.option("keyboard");
            if (!i) return;
            const n = t.composedPath()[0],
                s = document.activeElement && document.activeElement.classList,
                o = s && s.contains("f-button") || n.dataset.carouselPage || n.dataset.carouselIndex;
            if ("Escape" !== e && !o && S(n)) {
                if (n.isContentEditable || -1 !== ["TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO"].indexOf(n.nodeName)) return
            }
            if ("Tab" === t.key ? C(this.container, Qt) : P(this.container, Qt), t.ctrlKey || t.altKey || t.shiftKey) return;
            this.emit("keydown", e, t);
            const a = i[e];
            a && "function" == typeof this[a] && (t.preventDefault(), this[a]())
        }
        onResize() {
            const t = this.container;
            if (!t) return;
            const e = this.isCompact;
            t.classList.toggle(ee, e), this.manageCaption(this.getSlide()), this.isCompact ? this.clearIdle() : this.endIdle(), this.scale(), this.emit("resize")
        }
        onFocus(t) {
            this.isTopmost() && this.checkFocus(t)
        }
        onMousemove(t) {
            this.prevMouseMoveEvent = t, !this.isCompact && this.option("idle") && this.resetIdle()
        }
        onVisibilityChange() {
            "visible" === document.visibilityState ? this.checkFocus() : this.endIdle()
        }
        manageCloseBtn(t) {
            const e = this.optionFor(t, "closeButton") || !1;
            if ("auto" === e) {
                const t = this.plugins.Toolbar;
                if (t && t.state === _t.Ready) return
            }
            if (!e) return;
            if (!t.contentEl || t.closeBtnEl) return;
            const i = this.option("tpl.closeButton");
            if (i) {
                const e = s(this.localize(i));
                t.closeBtnEl = t.contentEl.appendChild(e), t.el && C(t.el, "has-close-btn")
            }
        }
        manageCaption(t = void 0) {
            var e, i;
            const n = "fancybox__caption",
                s = this.container;
            if (!s) return;
            P(s, se);
            const o = this.isCompact || this.option("commonCaption"),
                a = !o;
            if (this.caption && this.stop(this.caption), a && this.caption && (this.caption.remove(), this.caption = null), o && !this.caption)
                for (const t of (null === (e = this.carousel) || void 0 === e ? void 0 : e.slides) || []) t.captionEl && (t.captionEl.remove(), t.captionEl = void 0, P(t.el, se), null === (i = t.el) || void 0 === i || i.removeAttribute("aria-labelledby"));
            if (t || (t = this.getSlide()), !t || o && !this.isCurrentSlide(t)) return;
            const r = t.el;
            let l = this.optionFor(t, "caption", "");
            if (!l) return void (o && this.caption && this.animate(this.caption, "f-fadeOut", (() => {
                this.caption && (this.caption.innerHTML = "")
            })));
            let c = null;
            if (a) {
                if (c = t.captionEl || null, r && !c) {
                    const e = n + `_${this.id}_${t.index}`;
                    c = document.createElement("div"), C(c, n), c.setAttribute("id", e), t.captionEl = r.appendChild(c), C(r, se), r.setAttribute("aria-labelledby", e)
                }
            } else {
                if (c = this.caption, c || (c = s.querySelector("." + n)), !c) {
                    c = document.createElement("div"), c.dataset.fancyboxCaption = "", C(c, n);
                    (this.footer || s).prepend(c)
                }
                C(s, se), this.caption = c
            }
            c && (c.innerHTML = "", he(l) || "number" == typeof l ? c.innerHTML = l + "" : l instanceof HTMLElement && c.appendChild(l))
        }
        checkFocus(t) {
            this.focus(t)
        }
        focus(t) {
            var e;
            if (this.ignoreFocusChange) return;
            const i = document.activeElement || null,
                n = (null == t ? void 0 : t.target) || null,
                s = this.container,
                o = null === (e = this.carousel) || void 0 === e ? void 0 : e.viewport;
            if (!s || !o) return;
            if (!t && i && s.contains(i)) return;
            const a = this.getSlide(),
                r = a && a.state === lt.Ready ? a.el : null;
            if (!r || r.contains(i) || s === i) return;
            t && t.cancelable && t.preventDefault(), this.ignoreFocusChange = !0;
            const l = Array.from(s.querySelectorAll(nt));
            let c = [],
                h = null;
            for (let t of l) {
                const e = !t.offsetParent || !!t.closest('[aria-hidden="true"]'),
                    i = r && r.contains(t),
                    n = !o.contains(t);
                if (t === s || (i || n) && !e) {
                    c.push(t);
                    const e = t.dataset.origTabindex;
                    void 0 !== e && e && (t.tabIndex = parseFloat(e)), t.removeAttribute("data-orig-tabindex"), !t.hasAttribute("autoFocus") && h || (h = t)
                } else {
                    const e = void 0 === t.dataset.origTabindex ? t.getAttribute("tabindex") || "" : t.dataset.origTabindex;
                    e && (t.dataset.origTabindex = e), t.tabIndex = -1
                }
            }
            let d = null;
            t ? (!n || c.indexOf(n) < 0) && (d = h || s, c.length && (i === pe ? d = c[0] : this.lastFocus !== s && i !== fe || (d = c[c.length - 1]))) : d = a && "image" === a.type ? s : h || s, d && st(d), this.lastFocus = document.activeElement, this.ignoreFocusChange = !1
        }
        next() {
            const t = this.carousel;
            t && t.pages.length > 1 && t.slideNext()
        }
        prev() {
            const t = this.carousel;
            t && t.pages.length > 1 && t.slidePrev()
        }
        jumpTo(...t) {
            this.carousel && this.carousel.slideTo(...t)
        }
        isTopmost() {
            var t;
            return (null === (t = ye.getInstance()) || void 0 === t ? void 0 : t.id) == this.id
        }
        animate(t = null, e = "", i) {
            if (!t || !e) return void (i && i());
            this.stop(t);
            const n = s => {
                s.target === t && t.dataset.animationName && (t.removeEventListener("animationend", n), delete t.dataset.animationName, i && i(), P(t, e))
            };
            t.dataset.animationName = e, t.addEventListener("animationend", n), C(t, e)
        }
        stop(t) {
            t && t.dispatchEvent(new CustomEvent("animationend", {
                bubbles: !1,
                cancelable: !0,
                currentTarget: t
            }))
        }
        setContent(t, e = "", i = !0) {
            if (this.isClosing()) return;
            const n = t.el;
            if (!n) return;
            let o = null;
            if (S(e) ? o = e : (o = s(e + ""), S(o) || (o = document.createElement("div"), o.innerHTML = e + "")), ["img", "picture", "iframe", "video", "audio"].includes(o.nodeName.toLowerCase())) {
                const t = document.createElement("div");
                t.appendChild(o), o = t
            }
            S(o) && t.filter && !t.error && (o = o.querySelector(t.filter)), o && S(o) ? (C(o, "fancybox__content"), t.id && o.setAttribute("id", t.id), "none" !== o.style.display && "none" !== getComputedStyle(o).getPropertyValue("display") || (o.style.display = t.display || this.option("defaultDisplay") || "flex"), n.classList.add(`has-${t.error ? "error" : t.type || "unknown"}`), n.prepend(o), t.contentEl = o, i && this.revealContent(t), this.manageCloseBtn(t), this.manageCaption(t)) : this.setError(t, "{{ELEMENT_NOT_FOUND}}")
        }
        revealContent(t, e) {
            const i = t.el,
                n = t.contentEl;
            i && n && (this.emit("reveal", t), this.hideLoading(t), t.state = lt.Opening, (e = this.isOpeningSlide(t) ? void 0 === e ? this.optionFor(t, "showClass") : e : "f-fadeIn") ? this.animate(n, e, (() => {
                this.done(t)
            })) : this.done(t))
        }
        done(t) {
            this.isClosing() || (t.state = lt.Ready, this.emit("done", t), C(t.el, "is-done"), this.isCurrentSlide(t) && this.option("autoFocus") && queueMicrotask((() => {
                var e;
                null === (e = t.panzoom) || void 0 === e || e.updateControls(), this.option("autoFocus") && this.focus()
            })), this.isOpeningSlide(t) && (P(this.container, ne), !this.isCompact && this.option("idle") && this.setIdle()))
        }
        isCurrentSlide(t) {
            const e = this.getSlide();
            return !(!t || !e) && e.index === t.index
        }
        isOpeningSlide(t) {
            var e, i;
            return null === (null === (e = this.carousel) || void 0 === e ? void 0 : e.prevPage) && t.index === (null === (i = this.getSlide()) || void 0 === i ? void 0 : i.index)
        }
        showLoading(t) {
            t.state = lt.Loading;
            const e = t.el;
            if (!e) return;
            C(e, ie), this.emit("loading", t), t.spinnerEl || setTimeout((() => {
                if (!this.isClosing() && !t.spinnerEl && t.state === lt.Loading) {
                    let i = s(E);
                    C(i, "fancybox-spinner"), t.spinnerEl = i, e.prepend(i), this.animate(i, "f-fadeIn")
                }
            }), 250)
        }
        hideLoading(t) {
            const e = t.el;
            if (!e) return;
            const i = t.spinnerEl;
            this.isClosing() ? null == i || i.remove() : (P(e, ie), i && this.animate(i, "f-fadeOut", (() => {
                i.remove()
            })), t.state === lt.Loading && (this.emit("loaded", t), t.state = lt.Ready))
        }
        setError(t, e) {
            if (this.isClosing()) return;
            const i = new Event("error", {
                bubbles: !0,
                cancelable: !0
            });
            if (this.emit("error", i, t), i.defaultPrevented) return;
            t.error = e, this.hideLoading(t), this.clearContent(t);
            const n = document.createElement("div");
            n.classList.add("fancybox-error"), n.innerHTML = this.localize(e || "<p>{{ERROR}}</p>"), this.setContent(t, n)
        }
        clearContent(t) {
            if (void 0 === t.state) return;
            this.emit("clearContent", t), t.contentEl && (t.contentEl.remove(), t.contentEl = void 0);
            const e = t.el;
            e && (P(e, "has-error"), P(e, "has-unknown"), P(e, `has-${t.type || "unknown"}`)), t.closeBtnEl && t.closeBtnEl.remove(), t.closeBtnEl = void 0, t.captionEl && t.captionEl.remove(), t.captionEl = void 0, t.spinnerEl && t.spinnerEl.remove(), t.spinnerEl = void 0
        }
        getSlide() {
            var t;
            const e = this.carousel;
            return (null === (t = null == e ? void 0 : e.pages[null == e ? void 0 : e.page]) || void 0 === t ? void 0 : t.slides[0]) || void 0
        }
        close(t, e) {
            if (this.isClosing()) return;
            const i = new Event("shouldClose", {
                bubbles: !0,
                cancelable: !0
            });
            if (this.emit("shouldClose", i, t), i.defaultPrevented) return;
            t && t.cancelable && (t.preventDefault(), t.stopPropagation());
            const n = () => {
                this.proceedClose(t, e)
            };
            this.startedFs && ue && ue.isFullscreen() ? Promise.resolve(ue.exit()).then((() => n())) : n()
        }
        clearIdle() {
            this.idleTimer && clearTimeout(this.idleTimer), this.idleTimer = null
        }
        setIdle(t = !1) {
            const e = () => {
                this.clearIdle(), this.idle = !0, C(this.container, "is-idle"), this.emit("setIdle")
            };
            if (this.clearIdle(), !this.isClosing())
                if (t) e();
                else {
                    const t = this.option("idle");
                    t && (this.idleTimer = setTimeout(e, t))
                }
        }
        endIdle() {
            this.clearIdle(), this.idle && !this.isClosing() && (this.idle = !1, P(this.container, "is-idle"), this.emit("endIdle"))
        }
        resetIdle() {
            this.endIdle(), this.setIdle()
        }
        toggleIdle() {
            this.idle ? this.endIdle() : this.setIdle(!0)
        }
        toggleFullscreen() {
            ue && (ue.isFullscreen() ? ue.exit() : ue.request().then((() => {
                this.startedFs = !0
            })))
        }
        isClosing() {
            return [rt.Closing, rt.CustomClosing, rt.Destroy].includes(this.state)
        }
        proceedClose(t, e) {
            var i, n;
            this.state = rt.Closing, this.clearIdle(), this.detachEvents();
            const s = this.container,
                o = this.carousel,
                a = this.getSlide(),
                r = a && this.option("placeFocusBack") ? a.triggerEl || this.option("triggerEl") : null;
            if (r && (tt(r) ? st(r) : r.focus()), s && (P(s, ne), C(s, "is-closing"), s.setAttribute(Jt, "true"), this.option("animated") && C(s, te), s.style.pointerEvents = "none"), o) {
                o.clearTransitions(), null === (i = o.panzoom) || void 0 === i || i.destroy(), null === (n = o.plugins.Navigation) || void 0 === n || n.detach();
                for (const t of o.slides) {
                    t.state = lt.Closing, this.hideLoading(t);
                    const e = t.contentEl;
                    e && this.stop(e);
                    const i = null == t ? void 0 : t.panzoom;
                    i && (i.stop(), i.detachEvents(), i.detachObserver()), this.isCurrentSlide(t) || o.emit("removeSlide", t)
                }
            }
            this.emit("close", t), this.state !== rt.CustomClosing ? (void 0 === e && a && (e = this.optionFor(a, "hideClass")), e && a ? (this.animate(a.contentEl, e, (() => {
                o && o.emit("removeSlide", a)
            })), setTimeout((() => {
                this.destroy()
            }), 500)) : this.destroy()) : setTimeout((() => {
                this.destroy()
            }), 500)
        }
        destroy() {
            var t;
            if (this.state === rt.Destroy) return;
            this.state = rt.Destroy, null === (t = this.carousel) || void 0 === t || t.destroy();
            const e = this.container;
            e && e.remove(), be.delete(this.id);
            const i = ye.getInstance();
            i ? i.focus() : (fe && (fe.remove(), fe = null), pe && (pe.remove(), pe = null), P(document.documentElement, Zt), (() => {
                if (!et) return;
                const t = document,
                    e = t.body;
                e.classList.remove(Ut), e.style.setProperty(Kt, ""), t.documentElement.style.setProperty(Gt, "")
            })(), this.emit("destroy"))
        }
        static bind(t, e, i) {
            if (!et) return;
            let n, s = "",
                o = {};
            if (void 0 === t ? n = document.body : he(t) ? (n = document.body, s = t, "object" == typeof e && (o = e || {})) : (n = t, he(e) && (s = e), "object" == typeof i && (o = i || {})), !n || !S(n)) return;
            s = s || "[data-fancybox]";
            const a = ye.openers.get(n) || new Map;
            a.set(s, o), ye.openers.set(n, a), 1 === a.size && n.addEventListener("click", ye.fromEvent)
        }
        static unbind(t, e) {
            let i, n = "";
            if (he(t) ? (i = document.body, n = t) : (i = t, he(e) && (n = e)), !i) return;
            const s = ye.openers.get(i);
            s && n && s.delete(n), n && s || (ye.openers.delete(i), i.removeEventListener("click", ye.fromEvent))
        }
        static destroy() {
            let t;
            for (; t = ye.getInstance();) t.destroy();
            for (const t of ye.openers.keys()) t.removeEventListener("click", ye.fromEvent);
            ye.openers = new Map
        }
        static fromEvent(t) {
            if (t.defaultPrevented) return;
            if (t.button && 0 !== t.button) return;
            if (t.ctrlKey || t.metaKey || t.shiftKey) return;
            let e = t.composedPath()[0];
            const i = e.closest("[data-fancybox-trigger]");
            if (i) {
                const t = i.dataset.fancyboxTrigger || "",
                    n = document.querySelectorAll(`[data-fancybox="${t}"]`),
                    s = parseInt(i.dataset.fancyboxIndex || "", 10) || 0;
                e = n[s] || e
            }
            if (!(e && e instanceof Element)) return;
            let n, s, o, a;
            if ([...ye.openers].reverse().find((([t, i]) => !(!t.contains(e) || ![...i].reverse().find((([i, r]) => {
                let l = e.closest(i);
                return !!l && (n = t, s = i, o = l, a = r, !0)
            }))))), !n || !s || !o) return;
            a = a || {}, t.preventDefault(), e = o;
            let r = [],
                l = f({}, at, a);
            l.event = t, l.triggerEl = e, l.delegate = i;
            const c = l.groupAll,
                h = l.groupAttr,
                d = h && e ? e.getAttribute(`${h}`) : "";
            if ((!e || d || c) && (r = [].slice.call(n.querySelectorAll(s))), e && !c && (r = d ? r.filter((t => t.getAttribute(`${h}`) === d)) : [e]), !r.length) return;
            const u = ye.getInstance();
            return u && u.options.triggerEl && r.indexOf(u.options.triggerEl) > -1 ? void 0 : (e && (l.startIndex = r.indexOf(e)), ye.fromNodes(r, l))
        }
        static fromSelector(t, e, i) {
            let n = null,
                s = "",
                o = {};
            if (he(t) ? (n = document.body, s = t, "object" == typeof e && (o = e || {})) : t instanceof HTMLElement && he(e) && (n = t, s = e, "object" == typeof i && (o = i || {})), !n || !s) return !1;
            const a = ye.openers.get(n);
            return !!a && (o = f({}, a.get(s) || {}, o), !!o && ye.fromNodes(Array.from(n.querySelectorAll(s)), o))
        }
        static fromNodes(t, e) {
            e = f({}, at, e || {});
            const i = [];
            for (const n of t) {
                const t = n.dataset || {},
                    s = t[ce] || n.getAttribute(le) || n.getAttribute("currentSrc") || n.getAttribute(ce) || void 0;
                let o;
                const a = e.delegate;
                let r;
                a && i.length === e.startIndex && (o = a instanceof HTMLImageElement ? a : a.querySelector("img:not([aria-hidden])")), o || (o = n instanceof HTMLImageElement ? n : n.querySelector("img:not([aria-hidden])")), o && (r = o.currentSrc || o[ce] || void 0, !r && o.dataset && (r = o.dataset.lazySrc || o.dataset[ce] || void 0));
                const l = {
                    src: s,
                    triggerEl: n,
                    thumbEl: o,
                    thumbElSrc: r,
                    thumbSrc: r
                };
                for (const e in t) {
                    let i = t[e] + "";
                    i = "false" !== i && ("true" === i || i), l[e] = i
                }
                i.push(l)
            }
            return new ye(i, e)
        }
        static getInstance(t) {
            if (t) return be.get(t);
            return Array.from(be.values()).reverse().find((t => !t.isClosing() && t)) || null
        }
        static getSlide() {
            var t;
            return (null === (t = ye.getInstance()) || void 0 === t ? void 0 : t.getSlide()) || null
        }
        static show(t = [], e = {}) {
            return new ye(t, e)
        }
        static next() {
            const t = ye.getInstance();
            t && t.next()
        }
        static prev() {
            const t = ye.getInstance();
            t && t.prev()
        }
        static close(t = !0, ...e) {
            if (t)
                for (const t of be.values()) t.close(...e);
            else {
                const t = ye.getInstance();
                t && t.close(...e)
            }
        }
    }
    Object.defineProperty(ye, "version", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: "5.0.31"
    }), Object.defineProperty(ye, "defaults", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: at
    }), Object.defineProperty(ye, "Plugins", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: Vt
    }), Object.defineProperty(ye, "openers", {
        enumerable: !0,
        configurable: !0,
        writable: !0,
        value: new Map
    }), t.Carousel = Q, t.ModulaFancybox = ye, t.Panzoom = I
}));
