{"version":3,"file":"pdp.js","sources":["../../../node_modules/lightgallery/lightgallery.es5.js","../../../node_modules/lightgallery/plugins/zoom/lg-zoom.es5.js","../../../resources/modern-javascript/swatch/NabASwatch.js","../../../resources/modern-javascript/pdp/gallery.js","../../../resources/modern-javascript/pdp/dimensions.js","../../../resources/modern-javascript/util/cookie.js","../../../resources/modern-javascript/pdp/cylindo.js","../../../resources/modern-javascript/pdp/quick-add-overlay.js","../../../resources/modern-javascript/pdp/hash.js","../../../resources/modern-javascript/entrypoint/pdp.js","../../../resources/modern-javascript/pdp/chooser.js","../../../resources/modern-javascript/pdp/basket.js"],"sourcesContent":["/*!\n * lightgallery | 2.7.2 | September 20th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n    afterAppendSlide: 'lgAfterAppendSlide',\r\n    init: 'lgInit',\r\n    hasVideo: 'lgHasVideo',\r\n    containerResize: 'lgContainerResize',\r\n    updateSlides: 'lgUpdateSlides',\r\n    afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n    beforeOpen: 'lgBeforeOpen',\r\n    afterOpen: 'lgAfterOpen',\r\n    slideItemLoad: 'lgSlideItemLoad',\r\n    beforeSlide: 'lgBeforeSlide',\r\n    afterSlide: 'lgAfterSlide',\r\n    posterClick: 'lgPosterClick',\r\n    dragStart: 'lgDragStart',\r\n    dragMove: 'lgDragMove',\r\n    dragEnd: 'lgDragEnd',\r\n    beforeNextSlide: 'lgBeforeNextSlide',\r\n    beforePrevSlide: 'lgBeforePrevSlide',\r\n    beforeClose: 'lgBeforeClose',\r\n    afterClose: 'lgAfterClose',\r\n    rotateLeft: 'lgRotateLeft',\r\n    rotateRight: 'lgRotateRight',\r\n    flipHorizontal: 'lgFlipHorizontal',\r\n    flipVertical: 'lgFlipVertical',\r\n    autoplay: 'lgAutoplay',\r\n    autoplayStart: 'lgAutoplayStart',\r\n    autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar lightGalleryCoreSettings = {\r\n    mode: 'lg-slide',\r\n    easing: 'ease',\r\n    speed: 400,\r\n    licenseKey: '0000-0000-000-0000',\r\n    height: '100%',\r\n    width: '100%',\r\n    addClass: '',\r\n    startClass: 'lg-start-zoom',\r\n    backdropDuration: 300,\r\n    container: '',\r\n    startAnimationDuration: 400,\r\n    zoomFromOrigin: true,\r\n    hideBarsDelay: 0,\r\n    showBarsAfter: 10000,\r\n    slideDelay: 0,\r\n    supportLegacyBrowser: true,\r\n    allowMediaOverlap: false,\r\n    videoMaxSize: '1280-720',\r\n    loadYouTubePoster: true,\r\n    defaultCaptionHeight: 0,\r\n    ariaLabelledby: '',\r\n    ariaDescribedby: '',\r\n    resetScrollPosition: true,\r\n    hideScrollbar: false,\r\n    closable: true,\r\n    swipeToClose: true,\r\n    closeOnTap: true,\r\n    showCloseIcon: true,\r\n    showMaximizeIcon: false,\r\n    loop: true,\r\n    escKey: true,\r\n    keyPress: true,\r\n    trapFocus: true,\r\n    controls: true,\r\n    slideEndAnimation: true,\r\n    hideControlOnEnd: false,\r\n    mousewheel: false,\r\n    getCaptionFromTitleOrAlt: true,\r\n    appendSubHtmlTo: '.lg-sub-html',\r\n    subHtmlSelectorRelative: false,\r\n    preload: 2,\r\n    numberOfSlideItemsInDom: 10,\r\n    selector: '',\r\n    selectWithin: '',\r\n    nextHtml: '',\r\n    prevHtml: '',\r\n    index: 0,\r\n    iframeWidth: '100%',\r\n    iframeHeight: '100%',\r\n    iframeMaxWidth: '100%',\r\n    iframeMaxHeight: '100%',\r\n    download: true,\r\n    counter: true,\r\n    appendCounterTo: '.lg-toolbar',\r\n    swipeThreshold: 50,\r\n    enableSwipe: true,\r\n    enableDrag: true,\r\n    dynamic: false,\r\n    dynamicEl: [],\r\n    extraProps: [],\r\n    exThumbImage: '',\r\n    isMobile: undefined,\r\n    mobileSettings: {\r\n        controls: false,\r\n        showCloseIcon: false,\r\n        download: false,\r\n    },\r\n    plugins: [],\r\n    strings: {\r\n        closeGallery: 'Close gallery',\r\n        toggleMaximize: 'Toggle maximize',\r\n        previousSlide: 'Previous slide',\r\n        nextSlide: 'Next slide',\r\n        download: 'Download',\r\n        playVideo: 'Play video',\r\n        mediaLoadingFailed: 'Oops... Failed to load content...',\r\n    },\r\n};\n\nfunction initLgPolyfills() {\r\n    (function () {\r\n        if (typeof window.CustomEvent === 'function')\r\n            return false;\r\n        function CustomEvent(event, params) {\r\n            params = params || {\r\n                bubbles: false,\r\n                cancelable: false,\r\n                detail: null,\r\n            };\r\n            var evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n        window.CustomEvent = CustomEvent;\r\n    })();\r\n    (function () {\r\n        if (!Element.prototype.matches) {\r\n            Element.prototype.matches =\r\n                Element.prototype.msMatchesSelector ||\r\n                    Element.prototype.webkitMatchesSelector;\r\n        }\r\n    })();\r\n}\r\nvar lgQuery = /** @class */ (function () {\r\n    function lgQuery(selector) {\r\n        this.cssVenderPrefixes = [\r\n            'TransitionDuration',\r\n            'TransitionTimingFunction',\r\n            'Transform',\r\n            'Transition',\r\n        ];\r\n        this.selector = this._getSelector(selector);\r\n        this.firstElement = this._getFirstEl();\r\n        return this;\r\n    }\r\n    lgQuery.generateUUID = function () {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n            var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n            return v.toString(16);\r\n        });\r\n    };\r\n    lgQuery.prototype._getSelector = function (selector, context) {\r\n        if (context === void 0) { context = document; }\r\n        if (typeof selector !== 'string') {\r\n            return selector;\r\n        }\r\n        context = context || document;\r\n        var fl = selector.substring(0, 1);\r\n        if (fl === '#') {\r\n            return context.querySelector(selector);\r\n        }\r\n        else {\r\n            return context.querySelectorAll(selector);\r\n        }\r\n    };\r\n    lgQuery.prototype._each = function (func) {\r\n        if (!this.selector) {\r\n            return this;\r\n        }\r\n        if (this.selector.length !== undefined) {\r\n            [].forEach.call(this.selector, func);\r\n        }\r\n        else {\r\n            func(this.selector, 0);\r\n        }\r\n        return this;\r\n    };\r\n    lgQuery.prototype._setCssVendorPrefix = function (el, cssProperty, value) {\r\n        // prettier-ignore\r\n        var property = cssProperty.replace(/-([a-z])/gi, function (s, group1) {\r\n            return group1.toUpperCase();\r\n        });\r\n        if (this.cssVenderPrefixes.indexOf(property) !== -1) {\r\n            el.style[property.charAt(0).toLowerCase() + property.slice(1)] = value;\r\n            el.style['webkit' + property] = value;\r\n            el.style['moz' + property] = value;\r\n            el.style['ms' + property] = value;\r\n            el.style['o' + property] = value;\r\n        }\r\n        else {\r\n            el.style[property] = value;\r\n        }\r\n    };\r\n    lgQuery.prototype._getFirstEl = function () {\r\n        if (this.selector && this.selector.length !== undefined) {\r\n            return this.selector[0];\r\n        }\r\n        else {\r\n            return this.selector;\r\n        }\r\n    };\r\n    lgQuery.prototype.isEventMatched = function (event, eventName) {\r\n        var eventNamespace = eventName.split('.');\r\n        return event\r\n            .split('.')\r\n            .filter(function (e) { return e; })\r\n            .every(function (e) {\r\n            return eventNamespace.indexOf(e) !== -1;\r\n        });\r\n    };\r\n    lgQuery.prototype.attr = function (attr, value) {\r\n        if (value === undefined) {\r\n            if (!this.firstElement) {\r\n                return '';\r\n            }\r\n            return this.firstElement.getAttribute(attr);\r\n        }\r\n        this._each(function (el) {\r\n            el.setAttribute(attr, value);\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.find = function (selector) {\r\n        return $LG(this._getSelector(selector, this.selector));\r\n    };\r\n    lgQuery.prototype.first = function () {\r\n        if (this.selector && this.selector.length !== undefined) {\r\n            return $LG(this.selector[0]);\r\n        }\r\n        else {\r\n            return $LG(this.selector);\r\n        }\r\n    };\r\n    lgQuery.prototype.eq = function (index) {\r\n        return $LG(this.selector[index]);\r\n    };\r\n    lgQuery.prototype.parent = function () {\r\n        return $LG(this.selector.parentElement);\r\n    };\r\n    lgQuery.prototype.get = function () {\r\n        return this._getFirstEl();\r\n    };\r\n    lgQuery.prototype.removeAttr = function (attributes) {\r\n        var attrs = attributes.split(' ');\r\n        this._each(function (el) {\r\n            attrs.forEach(function (attr) { return el.removeAttribute(attr); });\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.wrap = function (className) {\r\n        if (!this.firstElement) {\r\n            return this;\r\n        }\r\n        var wrapper = document.createElement('div');\r\n        wrapper.className = className;\r\n        this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);\r\n        this.firstElement.parentNode.removeChild(this.firstElement);\r\n        wrapper.appendChild(this.firstElement);\r\n        return this;\r\n    };\r\n    lgQuery.prototype.addClass = function (classNames) {\r\n        if (classNames === void 0) { classNames = ''; }\r\n        this._each(function (el) {\r\n            // IE doesn't support multiple arguments\r\n            classNames.split(' ').forEach(function (className) {\r\n                if (className) {\r\n                    el.classList.add(className);\r\n                }\r\n            });\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.removeClass = function (classNames) {\r\n        this._each(function (el) {\r\n            // IE doesn't support multiple arguments\r\n            classNames.split(' ').forEach(function (className) {\r\n                if (className) {\r\n                    el.classList.remove(className);\r\n                }\r\n            });\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.hasClass = function (className) {\r\n        if (!this.firstElement) {\r\n            return false;\r\n        }\r\n        return this.firstElement.classList.contains(className);\r\n    };\r\n    lgQuery.prototype.hasAttribute = function (attribute) {\r\n        if (!this.firstElement) {\r\n            return false;\r\n        }\r\n        return this.firstElement.hasAttribute(attribute);\r\n    };\r\n    lgQuery.prototype.toggleClass = function (className) {\r\n        if (!this.firstElement) {\r\n            return this;\r\n        }\r\n        if (this.hasClass(className)) {\r\n            this.removeClass(className);\r\n        }\r\n        else {\r\n            this.addClass(className);\r\n        }\r\n        return this;\r\n    };\r\n    lgQuery.prototype.css = function (property, value) {\r\n        var _this = this;\r\n        this._each(function (el) {\r\n            _this._setCssVendorPrefix(el, property, value);\r\n        });\r\n        return this;\r\n    };\r\n    // Need to pass separate namespaces for separate elements\r\n    lgQuery.prototype.on = function (events, listener) {\r\n        var _this = this;\r\n        if (!this.selector) {\r\n            return this;\r\n        }\r\n        events.split(' ').forEach(function (event) {\r\n            if (!Array.isArray(lgQuery.eventListeners[event])) {\r\n                lgQuery.eventListeners[event] = [];\r\n            }\r\n            lgQuery.eventListeners[event].push(listener);\r\n            _this.selector.addEventListener(event.split('.')[0], listener);\r\n        });\r\n        return this;\r\n    };\r\n    // @todo - test this\r\n    lgQuery.prototype.once = function (event, listener) {\r\n        var _this = this;\r\n        this.on(event, function () {\r\n            _this.off(event);\r\n            listener(event);\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.off = function (event) {\r\n        var _this = this;\r\n        if (!this.selector) {\r\n            return this;\r\n        }\r\n        Object.keys(lgQuery.eventListeners).forEach(function (eventName) {\r\n            if (_this.isEventMatched(event, eventName)) {\r\n                lgQuery.eventListeners[eventName].forEach(function (listener) {\r\n                    _this.selector.removeEventListener(eventName.split('.')[0], listener);\r\n                });\r\n                lgQuery.eventListeners[eventName] = [];\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.trigger = function (event, detail) {\r\n        if (!this.firstElement) {\r\n            return this;\r\n        }\r\n        var customEvent = new CustomEvent(event.split('.')[0], {\r\n            detail: detail || null,\r\n        });\r\n        this.firstElement.dispatchEvent(customEvent);\r\n        return this;\r\n    };\r\n    // Does not support IE\r\n    lgQuery.prototype.load = function (url) {\r\n        var _this = this;\r\n        fetch(url)\r\n            .then(function (res) { return res.text(); })\r\n            .then(function (html) {\r\n            _this.selector.innerHTML = html;\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.html = function (html) {\r\n        if (html === undefined) {\r\n            if (!this.firstElement) {\r\n                return '';\r\n            }\r\n            return this.firstElement.innerHTML;\r\n        }\r\n        this._each(function (el) {\r\n            el.innerHTML = html;\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.append = function (html) {\r\n        this._each(function (el) {\r\n            if (typeof html === 'string') {\r\n                el.insertAdjacentHTML('beforeend', html);\r\n            }\r\n            else {\r\n                el.appendChild(html);\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.prepend = function (html) {\r\n        this._each(function (el) {\r\n            el.insertAdjacentHTML('afterbegin', html);\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.remove = function () {\r\n        this._each(function (el) {\r\n            el.parentNode.removeChild(el);\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.empty = function () {\r\n        this._each(function (el) {\r\n            el.innerHTML = '';\r\n        });\r\n        return this;\r\n    };\r\n    lgQuery.prototype.scrollTop = function (scrollTop) {\r\n        if (scrollTop !== undefined) {\r\n            document.body.scrollTop = scrollTop;\r\n            document.documentElement.scrollTop = scrollTop;\r\n            return this;\r\n        }\r\n        else {\r\n            return (window.pageYOffset ||\r\n                document.documentElement.scrollTop ||\r\n                document.body.scrollTop ||\r\n                0);\r\n        }\r\n    };\r\n    lgQuery.prototype.scrollLeft = function (scrollLeft) {\r\n        if (scrollLeft !== undefined) {\r\n            document.body.scrollLeft = scrollLeft;\r\n            document.documentElement.scrollLeft = scrollLeft;\r\n            return this;\r\n        }\r\n        else {\r\n            return (window.pageXOffset ||\r\n                document.documentElement.scrollLeft ||\r\n                document.body.scrollLeft ||\r\n                0);\r\n        }\r\n    };\r\n    lgQuery.prototype.offset = function () {\r\n        if (!this.firstElement) {\r\n            return {\r\n                left: 0,\r\n                top: 0,\r\n            };\r\n        }\r\n        var rect = this.firstElement.getBoundingClientRect();\r\n        var bodyMarginLeft = $LG('body').style().marginLeft;\r\n        // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value\r\n        return {\r\n            left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),\r\n            top: rect.top + this.scrollTop(),\r\n        };\r\n    };\r\n    lgQuery.prototype.style = function () {\r\n        if (!this.firstElement) {\r\n            return {};\r\n        }\r\n        return (this.firstElement.currentStyle ||\r\n            window.getComputedStyle(this.firstElement));\r\n    };\r\n    // Width without padding and border even if box-sizing is used.\r\n    lgQuery.prototype.width = function () {\r\n        var style = this.style();\r\n        return (this.firstElement.clientWidth -\r\n            parseFloat(style.paddingLeft) -\r\n            parseFloat(style.paddingRight));\r\n    };\r\n    // Height without padding and border even if box-sizing is used.\r\n    lgQuery.prototype.height = function () {\r\n        var style = this.style();\r\n        return (this.firstElement.clientHeight -\r\n            parseFloat(style.paddingTop) -\r\n            parseFloat(style.paddingBottom));\r\n    };\r\n    lgQuery.eventListeners = {};\r\n    return lgQuery;\r\n}());\r\nfunction $LG(selector) {\r\n    initLgPolyfills();\r\n    return new lgQuery(selector);\r\n}\n\nvar defaultDynamicOptions = [\r\n    'src',\r\n    'sources',\r\n    'subHtml',\r\n    'subHtmlUrl',\r\n    'html',\r\n    'video',\r\n    'poster',\r\n    'slideName',\r\n    'responsive',\r\n    'srcset',\r\n    'sizes',\r\n    'iframe',\r\n    'downloadUrl',\r\n    'download',\r\n    'width',\r\n    'facebookShareUrl',\r\n    'tweetText',\r\n    'iframeTitle',\r\n    'twitterShareUrl',\r\n    'pinterestShareUrl',\r\n    'pinterestText',\r\n    'fbHtml',\r\n    'disqusIdentifier',\r\n    'disqusUrl',\r\n];\r\n// Convert html data-attribute to camalcase\r\nfunction convertToData(attr) {\r\n    // FInd a way for lgsize\r\n    if (attr === 'href') {\r\n        return 'src';\r\n    }\r\n    attr = attr.replace('data-', '');\r\n    attr = attr.charAt(0).toLowerCase() + attr.slice(1);\r\n    attr = attr.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });\r\n    return attr;\r\n}\r\nvar utils = {\r\n    /**\r\n     * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option\r\n     */\r\n    getSize: function (el, container, spacing, defaultLgSize) {\r\n        if (spacing === void 0) { spacing = 0; }\r\n        var LGel = $LG(el);\r\n        var lgSize = LGel.attr('data-lg-size') || defaultLgSize;\r\n        if (!lgSize) {\r\n            return;\r\n        }\r\n        var isResponsiveSizes = lgSize.split(',');\r\n        // if at-least two viewport sizes are available\r\n        if (isResponsiveSizes[1]) {\r\n            var wWidth = window.innerWidth;\r\n            for (var i = 0; i < isResponsiveSizes.length; i++) {\r\n                var size_1 = isResponsiveSizes[i];\r\n                var responsiveWidth = parseInt(size_1.split('-')[2], 10);\r\n                if (responsiveWidth > wWidth) {\r\n                    lgSize = size_1;\r\n                    break;\r\n                }\r\n                // take last item as last option\r\n                if (i === isResponsiveSizes.length - 1) {\r\n                    lgSize = size_1;\r\n                }\r\n            }\r\n        }\r\n        var size = lgSize.split('-');\r\n        var width = parseInt(size[0], 10);\r\n        var height = parseInt(size[1], 10);\r\n        var cWidth = container.width();\r\n        var cHeight = container.height() - spacing;\r\n        var maxWidth = Math.min(cWidth, width);\r\n        var maxHeight = Math.min(cHeight, height);\r\n        var ratio = Math.min(maxWidth / width, maxHeight / height);\r\n        return { width: width * ratio, height: height * ratio };\r\n    },\r\n    /**\r\n     * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option\r\n     * @param {jQuery Element}\r\n     * @returns {String} Transform CSS string\r\n     */\r\n    getTransform: function (el, container, top, bottom, imageSize) {\r\n        if (!imageSize) {\r\n            return;\r\n        }\r\n        var LGel = $LG(el).find('img').first();\r\n        if (!LGel.get()) {\r\n            return;\r\n        }\r\n        var containerRect = container.get().getBoundingClientRect();\r\n        var wWidth = containerRect.width;\r\n        // using innerWidth to include mobile safari bottom bar\r\n        var wHeight = container.height() - (top + bottom);\r\n        var elWidth = LGel.width();\r\n        var elHeight = LGel.height();\r\n        var elStyle = LGel.style();\r\n        var x = (wWidth - elWidth) / 2 -\r\n            LGel.offset().left +\r\n            (parseFloat(elStyle.paddingLeft) || 0) +\r\n            (parseFloat(elStyle.borderLeft) || 0) +\r\n            $LG(window).scrollLeft() +\r\n            containerRect.left;\r\n        var y = (wHeight - elHeight) / 2 -\r\n            LGel.offset().top +\r\n            (parseFloat(elStyle.paddingTop) || 0) +\r\n            (parseFloat(elStyle.borderTop) || 0) +\r\n            $LG(window).scrollTop() +\r\n            top;\r\n        var scX = elWidth / imageSize.width;\r\n        var scY = elHeight / imageSize.height;\r\n        var transform = 'translate3d(' +\r\n            (x *= -1) +\r\n            'px, ' +\r\n            (y *= -1) +\r\n            'px, 0) scale3d(' +\r\n            scX +\r\n            ', ' +\r\n            scY +\r\n            ', 1)';\r\n        return transform;\r\n    },\r\n    getIframeMarkup: function (iframeWidth, iframeHeight, iframeMaxWidth, iframeMaxHeight, src, iframeTitle) {\r\n        var title = iframeTitle ? 'title=\"' + iframeTitle + '\"' : '';\r\n        return \"<div class=\\\"lg-video-cont lg-has-iframe\\\" style=\\\"width:\" + iframeWidth + \"; max-width:\" + iframeMaxWidth + \"; height: \" + iframeHeight + \"; max-height:\" + iframeMaxHeight + \"\\\">\\n                    <iframe class=\\\"lg-object\\\" frameborder=\\\"0\\\" \" + title + \" src=\\\"\" + src + \"\\\"  allowfullscreen=\\\"true\\\"></iframe>\\n                </div>\";\r\n    },\r\n    getImgMarkup: function (index, src, altAttr, srcset, sizes, sources) {\r\n        var srcsetAttr = srcset ? \"srcset=\\\"\" + srcset + \"\\\"\" : '';\r\n        var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\"\" : '';\r\n        var imgMarkup = \"<img \" + altAttr + \" \" + srcsetAttr + \"  \" + sizesAttr + \" class=\\\"lg-object lg-image\\\" data-index=\\\"\" + index + \"\\\" src=\\\"\" + src + \"\\\" />\";\r\n        var sourceTag = '';\r\n        if (sources) {\r\n            var sourceObj = typeof sources === 'string' ? JSON.parse(sources) : sources;\r\n            sourceTag = sourceObj.map(function (source) {\r\n                var attrs = '';\r\n                Object.keys(source).forEach(function (key) {\r\n                    // Do not remove the first space as it is required to separate the attributes\r\n                    attrs += \" \" + key + \"=\\\"\" + source[key] + \"\\\"\";\r\n                });\r\n                return \"<source \" + attrs + \"></source>\";\r\n            });\r\n        }\r\n        return \"\" + sourceTag + imgMarkup;\r\n    },\r\n    // Get src from responsive src\r\n    getResponsiveSrc: function (srcItms) {\r\n        var rsWidth = [];\r\n        var rsSrc = [];\r\n        var src = '';\r\n        for (var i = 0; i < srcItms.length; i++) {\r\n            var _src = srcItms[i].split(' ');\r\n            // Manage empty space\r\n            if (_src[0] === '') {\r\n                _src.splice(0, 1);\r\n            }\r\n            rsSrc.push(_src[0]);\r\n            rsWidth.push(_src[1]);\r\n        }\r\n        var wWidth = window.innerWidth;\r\n        for (var j = 0; j < rsWidth.length; j++) {\r\n            if (parseInt(rsWidth[j], 10) > wWidth) {\r\n                src = rsSrc[j];\r\n                break;\r\n            }\r\n        }\r\n        return src;\r\n    },\r\n    isImageLoaded: function (img) {\r\n        if (!img)\r\n            return false;\r\n        // During the onload event, IE correctly identifies any images that\r\n        // weren’t downloaded as not complete. Others should too. Gecko-based\r\n        // browsers act like NS4 in that they report this incorrectly.\r\n        if (!img.complete) {\r\n            return false;\r\n        }\r\n        // However, they do have two very useful properties: naturalWidth and\r\n        // naturalHeight. These give the true size of the image. If it failed\r\n        // to load, either of these should be zero.\r\n        if (img.naturalWidth === 0) {\r\n            return false;\r\n        }\r\n        // No other way of checking: assume it’s ok.\r\n        return true;\r\n    },\r\n    getVideoPosterMarkup: function (_poster, dummyImg, videoContStyle, playVideoString, _isVideo) {\r\n        var videoClass = '';\r\n        if (_isVideo && _isVideo.youtube) {\r\n            videoClass = 'lg-has-youtube';\r\n        }\r\n        else if (_isVideo && _isVideo.vimeo) {\r\n            videoClass = 'lg-has-vimeo';\r\n        }\r\n        else {\r\n            videoClass = 'lg-has-html5';\r\n        }\r\n        return \"<div class=\\\"lg-video-cont \" + videoClass + \"\\\" style=\\\"\" + videoContStyle + \"\\\">\\n                <div class=\\\"lg-video-play-button\\\">\\n                <svg\\n                    viewBox=\\\"0 0 20 20\\\"\\n                    preserveAspectRatio=\\\"xMidYMid\\\"\\n                    focusable=\\\"false\\\"\\n                    aria-labelledby=\\\"\" + playVideoString + \"\\\"\\n                    role=\\\"img\\\"\\n                    class=\\\"lg-video-play-icon\\\"\\n                >\\n                    <title>\" + playVideoString + \"</title>\\n                    <polygon class=\\\"lg-video-play-icon-inner\\\" points=\\\"1,0 20,10 1,20\\\"></polygon>\\n                </svg>\\n                <svg class=\\\"lg-video-play-icon-bg\\\" viewBox=\\\"0 0 50 50\\\" focusable=\\\"false\\\">\\n                    <circle cx=\\\"50%\\\" cy=\\\"50%\\\" r=\\\"20\\\"></circle></svg>\\n                <svg class=\\\"lg-video-play-icon-circle\\\" viewBox=\\\"0 0 50 50\\\" focusable=\\\"false\\\">\\n                    <circle cx=\\\"50%\\\" cy=\\\"50%\\\" r=\\\"20\\\"></circle>\\n                </svg>\\n            </div>\\n            \" + (dummyImg || '') + \"\\n            <img class=\\\"lg-object lg-video-poster\\\" src=\\\"\" + _poster + \"\\\" />\\n        </div>\";\r\n    },\r\n    getFocusableElements: function (container) {\r\n        var elements = container.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])');\r\n        var visibleElements = [].filter.call(elements, function (element) {\r\n            var style = window.getComputedStyle(element);\r\n            return style.display !== 'none' && style.visibility !== 'hidden';\r\n        });\r\n        return visibleElements;\r\n    },\r\n    /**\r\n     * @desc Create dynamic elements array from gallery items when dynamic option is false\r\n     * It helps to avoid frequent DOM interaction\r\n     * and avoid multiple checks for dynamic elments\r\n     *\r\n     * @returns {Array} dynamicEl\r\n     */\r\n    getDynamicOptions: function (items, extraProps, getCaptionFromTitleOrAlt, exThumbImage) {\r\n        var dynamicElements = [];\r\n        var availableDynamicOptions = __spreadArrays(defaultDynamicOptions, extraProps);\r\n        [].forEach.call(items, function (item) {\r\n            var dynamicEl = {};\r\n            for (var i = 0; i < item.attributes.length; i++) {\r\n                var attr = item.attributes[i];\r\n                if (attr.specified) {\r\n                    var dynamicAttr = convertToData(attr.name);\r\n                    var label = '';\r\n                    if (availableDynamicOptions.indexOf(dynamicAttr) > -1) {\r\n                        label = dynamicAttr;\r\n                    }\r\n                    if (label) {\r\n                        dynamicEl[label] = attr.value;\r\n                    }\r\n                }\r\n            }\r\n            var currentItem = $LG(item);\r\n            var alt = currentItem.find('img').first().attr('alt');\r\n            var title = currentItem.attr('title');\r\n            var thumb = exThumbImage\r\n                ? currentItem.attr(exThumbImage)\r\n                : currentItem.find('img').first().attr('src');\r\n            dynamicEl.thumb = thumb;\r\n            if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) {\r\n                dynamicEl.subHtml = title || alt || '';\r\n            }\r\n            dynamicEl.alt = alt || title || '';\r\n            dynamicElements.push(dynamicEl);\r\n        });\r\n        return dynamicElements;\r\n    },\r\n    isMobile: function () {\r\n        return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n    },\r\n    /**\r\n     * @desc Check the given src is video\r\n     * @param {String} src\r\n     * @return {Object} video type\r\n     * Ex:{ youtube  :  [\"//www.youtube.com/watch?v=c0asJgSyxcY\", \"c0asJgSyxcY\"] }\r\n     *\r\n     * @todo - this information can be moved to dynamicEl to avoid frequent calls\r\n     */\r\n    isVideo: function (src, isHTML5VIdeo, index) {\r\n        if (!src) {\r\n            if (isHTML5VIdeo) {\r\n                return {\r\n                    html5: true,\r\n                };\r\n            }\r\n            else {\r\n                console.error('lightGallery :- data-src is not provided on slide item ' +\r\n                    (index + 1) +\r\n                    '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/');\r\n                return;\r\n            }\r\n        }\r\n        var youtube = src.match(/\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com|be-nocookie\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-\\_\\%]+)([\\&|?][\\S]*)*/i);\r\n        var vimeo = src.match(/\\/\\/(?:www\\.)?(?:player\\.)?vimeo.com\\/(?:video\\/)?([0-9a-z\\-_]+)(.*)?/i);\r\n        var wistia = src.match(/https?:\\/\\/(.+)?(wistia\\.com|wi\\.st)\\/(medias|embed)\\/([0-9a-z\\-_]+)(.*)/);\r\n        if (youtube) {\r\n            return {\r\n                youtube: youtube,\r\n            };\r\n        }\r\n        else if (vimeo) {\r\n            return {\r\n                vimeo: vimeo,\r\n            };\r\n        }\r\n        else if (wistia) {\r\n            return {\r\n                wistia: wistia,\r\n            };\r\n        }\r\n    },\r\n};\n\n// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio\r\n// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html\r\n// Unique id for each gallery\r\nvar lgId = 0;\r\nvar LightGallery = /** @class */ (function () {\r\n    function LightGallery(element, options) {\r\n        this.lgOpened = false;\r\n        this.index = 0;\r\n        // lightGallery modules\r\n        this.plugins = [];\r\n        // false when lightGallery load first slide content;\r\n        this.lGalleryOn = false;\r\n        // True when a slide animation is in progress\r\n        this.lgBusy = false;\r\n        this.currentItemsInDom = [];\r\n        // Scroll top value before lightGallery is opened\r\n        this.prevScrollTop = 0;\r\n        this.bodyPaddingRight = 0;\r\n        this.isDummyImageRemoved = false;\r\n        this.dragOrSwipeEnabled = false;\r\n        this.mediaContainerPosition = {\r\n            top: 0,\r\n            bottom: 0,\r\n        };\r\n        if (!element) {\r\n            return this;\r\n        }\r\n        lgId++;\r\n        this.lgId = lgId;\r\n        this.el = element;\r\n        this.LGel = $LG(element);\r\n        this.generateSettings(options);\r\n        this.buildModules();\r\n        // When using dynamic mode, ensure dynamicEl is an array\r\n        if (this.settings.dynamic &&\r\n            this.settings.dynamicEl !== undefined &&\r\n            !Array.isArray(this.settings.dynamicEl)) {\r\n            throw 'When using dynamic mode, you must also define dynamicEl as an Array.';\r\n        }\r\n        this.galleryItems = this.getItems();\r\n        this.normalizeSettings();\r\n        // Gallery items\r\n        this.init();\r\n        this.validateLicense();\r\n        return this;\r\n    }\r\n    LightGallery.prototype.generateSettings = function (options) {\r\n        // lightGallery settings\r\n        this.settings = __assign(__assign({}, lightGalleryCoreSettings), options);\r\n        if (this.settings.isMobile &&\r\n            typeof this.settings.isMobile === 'function'\r\n            ? this.settings.isMobile()\r\n            : utils.isMobile()) {\r\n            var mobileSettings = __assign(__assign({}, this.settings.mobileSettings), this.settings.mobileSettings);\r\n            this.settings = __assign(__assign({}, this.settings), mobileSettings);\r\n        }\r\n    };\r\n    LightGallery.prototype.normalizeSettings = function () {\r\n        if (this.settings.slideEndAnimation) {\r\n            this.settings.hideControlOnEnd = false;\r\n        }\r\n        if (!this.settings.closable) {\r\n            this.settings.swipeToClose = false;\r\n        }\r\n        // And reset it on close to get the correct value next time\r\n        this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n        // At the moment, Zoom from image doesn't support dynamic options\r\n        // @todo add zoomFromOrigin support for dynamic images\r\n        if (this.settings.dynamic) {\r\n            this.zoomFromOrigin = false;\r\n        }\r\n        if (!this.settings.container) {\r\n            this.settings.container = document.body;\r\n        }\r\n        // settings.preload should not be grater than $item.length\r\n        this.settings.preload = Math.min(this.settings.preload, this.galleryItems.length);\r\n    };\r\n    LightGallery.prototype.init = function () {\r\n        var _this = this;\r\n        this.addSlideVideoInfo(this.galleryItems);\r\n        this.buildStructure();\r\n        this.LGel.trigger(lGEvents.init, {\r\n            instance: this,\r\n        });\r\n        if (this.settings.keyPress) {\r\n            this.keyPress();\r\n        }\r\n        setTimeout(function () {\r\n            _this.enableDrag();\r\n            _this.enableSwipe();\r\n            _this.triggerPosterClick();\r\n        }, 50);\r\n        this.arrow();\r\n        if (this.settings.mousewheel) {\r\n            this.mousewheel();\r\n        }\r\n        if (!this.settings.dynamic) {\r\n            this.openGalleryOnItemClick();\r\n        }\r\n    };\r\n    LightGallery.prototype.openGalleryOnItemClick = function () {\r\n        var _this = this;\r\n        var _loop_1 = function (index) {\r\n            var element = this_1.items[index];\r\n            var $element = $LG(element);\r\n            // Using different namespace for click because click event should not unbind if selector is same object('this')\r\n            // @todo manage all event listners - should have namespace that represent element\r\n            var uuid = lgQuery.generateUUID();\r\n            $element\r\n                .attr('data-lg-id', uuid)\r\n                .on(\"click.lgcustom-item-\" + uuid, function (e) {\r\n                e.preventDefault();\r\n                var currentItemIndex = _this.settings.index || index;\r\n                _this.openGallery(currentItemIndex, element);\r\n            });\r\n        };\r\n        var this_1 = this;\r\n        // Using for loop instead of using bubbling as the items can be any html element.\r\n        for (var index = 0; index < this.items.length; index++) {\r\n            _loop_1(index);\r\n        }\r\n    };\r\n    /**\r\n     * Module constructor\r\n     * Modules are build incrementally.\r\n     * Gallery should be opened only once all the modules are initialized.\r\n     * use moduleBuildTimeout to make sure this\r\n     */\r\n    LightGallery.prototype.buildModules = function () {\r\n        var _this = this;\r\n        this.settings.plugins.forEach(function (plugin) {\r\n            _this.plugins.push(new plugin(_this, $LG));\r\n        });\r\n    };\r\n    LightGallery.prototype.validateLicense = function () {\r\n        if (!this.settings.licenseKey) {\r\n            console.error('Please provide a valid license key');\r\n        }\r\n        else if (this.settings.licenseKey === '0000-0000-000-0000') {\r\n            console.warn(\"lightGallery: \" + this.settings.licenseKey + \" license key is not valid for production use\");\r\n        }\r\n    };\r\n    LightGallery.prototype.getSlideItem = function (index) {\r\n        return $LG(this.getSlideItemId(index));\r\n    };\r\n    LightGallery.prototype.getSlideItemId = function (index) {\r\n        return \"#lg-item-\" + this.lgId + \"-\" + index;\r\n    };\r\n    LightGallery.prototype.getIdName = function (id) {\r\n        return id + \"-\" + this.lgId;\r\n    };\r\n    LightGallery.prototype.getElementById = function (id) {\r\n        return $LG(\"#\" + this.getIdName(id));\r\n    };\r\n    LightGallery.prototype.manageSingleSlideClassName = function () {\r\n        if (this.galleryItems.length < 2) {\r\n            this.outer.addClass('lg-single-item');\r\n        }\r\n        else {\r\n            this.outer.removeClass('lg-single-item');\r\n        }\r\n    };\r\n    LightGallery.prototype.buildStructure = function () {\r\n        var _this = this;\r\n        var container = this.$container && this.$container.get();\r\n        if (container) {\r\n            return;\r\n        }\r\n        var controls = '';\r\n        var subHtmlCont = '';\r\n        // Create controls\r\n        if (this.settings.controls) {\r\n            controls = \"<button type=\\\"button\\\" id=\\\"\" + this.getIdName('lg-prev') + \"\\\" aria-label=\\\"\" + this.settings.strings['previousSlide'] + \"\\\" class=\\\"lg-prev lg-icon\\\"> \" + this.settings.prevHtml + \" </button>\\n                <button type=\\\"button\\\" id=\\\"\" + this.getIdName('lg-next') + \"\\\" aria-label=\\\"\" + this.settings.strings['nextSlide'] + \"\\\" class=\\\"lg-next lg-icon\\\"> \" + this.settings.nextHtml + \" </button>\";\r\n        }\r\n        if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n            subHtmlCont =\r\n                '<div class=\"lg-sub-html\" role=\"status\" aria-live=\"polite\"></div>';\r\n        }\r\n        var addClasses = '';\r\n        if (this.settings.allowMediaOverlap) {\r\n            // Do not remove space before last single quote\r\n            addClasses += 'lg-media-overlap ';\r\n        }\r\n        var ariaLabelledby = this.settings.ariaLabelledby\r\n            ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\r\n            : '';\r\n        var ariaDescribedby = this.settings.ariaDescribedby\r\n            ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\r\n            : '';\r\n        var containerClassName = \"lg-container \" + this.settings.addClass + \" \" + (document.body !== this.settings.container ? 'lg-inline' : '');\r\n        var closeIcon = this.settings.closable && this.settings.showCloseIcon\r\n            ? \"<button type=\\\"button\\\" aria-label=\\\"\" + this.settings.strings['closeGallery'] + \"\\\" id=\\\"\" + this.getIdName('lg-close') + \"\\\" class=\\\"lg-close lg-icon\\\"></button>\"\r\n            : '';\r\n        var maximizeIcon = this.settings.showMaximizeIcon\r\n            ? \"<button type=\\\"button\\\" aria-label=\\\"\" + this.settings.strings['toggleMaximize'] + \"\\\" id=\\\"\" + this.getIdName('lg-maximize') + \"\\\" class=\\\"lg-maximize lg-icon\\\"></button>\"\r\n            : '';\r\n        var template = \"\\n        <div class=\\\"\" + containerClassName + \"\\\" id=\\\"\" + this.getIdName('lg-container') + \"\\\" tabindex=\\\"-1\\\" aria-modal=\\\"true\\\" \" + ariaLabelledby + \" \" + ariaDescribedby + \" role=\\\"dialog\\\"\\n        >\\n            <div id=\\\"\" + this.getIdName('lg-backdrop') + \"\\\" class=\\\"lg-backdrop\\\"></div>\\n\\n            <div id=\\\"\" + this.getIdName('lg-outer') + \"\\\" class=\\\"lg-outer lg-use-css3 lg-css3 lg-hide-items \" + addClasses + \" \\\">\\n\\n              <div id=\\\"\" + this.getIdName('lg-content') + \"\\\" class=\\\"lg-content\\\">\\n                <div id=\\\"\" + this.getIdName('lg-inner') + \"\\\" class=\\\"lg-inner\\\">\\n                </div>\\n                \" + controls + \"\\n              </div>\\n                <div id=\\\"\" + this.getIdName('lg-toolbar') + \"\\\" class=\\\"lg-toolbar lg-group\\\">\\n                    \" + maximizeIcon + \"\\n                    \" + closeIcon + \"\\n                    </div>\\n                    \" + (this.settings.appendSubHtmlTo === '.lg-outer'\r\n            ? subHtmlCont\r\n            : '') + \"\\n                <div id=\\\"\" + this.getIdName('lg-components') + \"\\\" class=\\\"lg-components\\\">\\n                    \" + (this.settings.appendSubHtmlTo === '.lg-sub-html'\r\n            ? subHtmlCont\r\n            : '') + \"\\n                </div>\\n            </div>\\n        </div>\\n        \";\r\n        $LG(this.settings.container).append(template);\r\n        if (document.body !== this.settings.container) {\r\n            $LG(this.settings.container).css('position', 'relative');\r\n        }\r\n        this.outer = this.getElementById('lg-outer');\r\n        this.$lgComponents = this.getElementById('lg-components');\r\n        this.$backdrop = this.getElementById('lg-backdrop');\r\n        this.$container = this.getElementById('lg-container');\r\n        this.$inner = this.getElementById('lg-inner');\r\n        this.$content = this.getElementById('lg-content');\r\n        this.$toolbar = this.getElementById('lg-toolbar');\r\n        this.$backdrop.css('transition-duration', this.settings.backdropDuration + 'ms');\r\n        var outerClassNames = this.settings.mode + \" \";\r\n        this.manageSingleSlideClassName();\r\n        if (this.settings.enableDrag) {\r\n            outerClassNames += 'lg-grab ';\r\n        }\r\n        this.outer.addClass(outerClassNames);\r\n        this.$inner.css('transition-timing-function', this.settings.easing);\r\n        this.$inner.css('transition-duration', this.settings.speed + 'ms');\r\n        if (this.settings.download) {\r\n            this.$toolbar.append(\"<a id=\\\"\" + this.getIdName('lg-download') + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" aria-label=\\\"\" + this.settings.strings['download'] + \"\\\" download class=\\\"lg-download lg-icon\\\"></a>\");\r\n        }\r\n        this.counter();\r\n        $LG(window).on(\"resize.lg.global\" + this.lgId + \" orientationchange.lg.global\" + this.lgId, function () {\r\n            _this.refreshOnResize();\r\n        });\r\n        this.hideBars();\r\n        this.manageCloseGallery();\r\n        this.toggleMaximize();\r\n        this.initModules();\r\n    };\r\n    LightGallery.prototype.refreshOnResize = function () {\r\n        if (this.lgOpened) {\r\n            var currentGalleryItem = this.galleryItems[this.index];\r\n            var __slideVideoInfo = currentGalleryItem.__slideVideoInfo;\r\n            this.mediaContainerPosition = this.getMediaContainerPosition();\r\n            var _a = this.mediaContainerPosition, top_1 = _a.top, bottom = _a.bottom;\r\n            this.currentImageSize = utils.getSize(this.items[this.index], this.outer, top_1 + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n            if (__slideVideoInfo) {\r\n                this.resizeVideoSlide(this.index, this.currentImageSize);\r\n            }\r\n            if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\r\n                var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n                this.outer\r\n                    .find('.lg-current .lg-dummy-img')\r\n                    .first()\r\n                    .attr('style', imgStyle);\r\n            }\r\n            this.LGel.trigger(lGEvents.containerResize);\r\n        }\r\n    };\r\n    LightGallery.prototype.resizeVideoSlide = function (index, imageSize) {\r\n        var lgVideoStyle = this.getVideoContStyle(imageSize);\r\n        var currentSlide = this.getSlideItem(index);\r\n        currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\r\n    };\r\n    /**\r\n     * Update slides dynamically.\r\n     * Add, edit or delete slides dynamically when lightGallery is opened.\r\n     * Modify the current gallery items and pass it via updateSlides method\r\n     * @note\r\n     * - Do not mutate existing lightGallery items directly.\r\n     * - Always pass new list of gallery items\r\n     * - You need to take care of thumbnails outside the gallery if any\r\n     * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\r\n     * @param items Gallery items\r\n     * @param index After the update operation, which slide gallery should navigate to\r\n     * @category lGPublicMethods\r\n     * @example\r\n     * const plugin = lightGallery();\r\n     *\r\n     * // Adding slides dynamically\r\n     * let galleryItems = [\r\n     * // Access existing lightGallery items\r\n     * // galleryItems are automatically generated internally from the gallery HTML markup\r\n     * // or directly from galleryItems when dynamic gallery is used\r\n     *   ...plugin.galleryItems,\r\n     *     ...[\r\n     *       {\r\n     *         src: 'img/img-1.png',\r\n     *           thumb: 'img/thumb1.png',\r\n     *         },\r\n     *     ],\r\n     *   ];\r\n     *   plugin.updateSlides(\r\n     *     galleryItems,\r\n     *     plugin.index,\r\n     *   );\r\n     *\r\n     *\r\n     * // Remove slides dynamically\r\n     * galleryItems = JSON.parse(\r\n     *   JSON.stringify(updateSlideInstance.galleryItems),\r\n     * );\r\n     * galleryItems.shift();\r\n     * updateSlideInstance.updateSlides(galleryItems, 1);\r\n     * @see <a href=\"/demos/update-slides/\">Demo</a>\r\n     */\r\n    LightGallery.prototype.updateSlides = function (items, index) {\r\n        if (this.index > items.length - 1) {\r\n            this.index = items.length - 1;\r\n        }\r\n        if (items.length === 1) {\r\n            this.index = 0;\r\n        }\r\n        if (!items.length) {\r\n            this.closeGallery();\r\n            return;\r\n        }\r\n        var currentSrc = this.galleryItems[index].src;\r\n        this.galleryItems = items;\r\n        this.updateControls();\r\n        this.$inner.empty();\r\n        this.currentItemsInDom = [];\r\n        var _index = 0;\r\n        // Find the current index based on source value of the slide\r\n        this.galleryItems.some(function (galleryItem, itemIndex) {\r\n            if (galleryItem.src === currentSrc) {\r\n                _index = itemIndex;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        this.currentItemsInDom = this.organizeSlideItems(_index, -1);\r\n        this.loadContent(_index, true);\r\n        this.getSlideItem(_index).addClass('lg-current');\r\n        this.index = _index;\r\n        this.updateCurrentCounter(_index);\r\n        this.LGel.trigger(lGEvents.updateSlides);\r\n    };\r\n    // Get gallery items based on multiple conditions\r\n    LightGallery.prototype.getItems = function () {\r\n        // Gallery items\r\n        this.items = [];\r\n        if (!this.settings.dynamic) {\r\n            if (this.settings.selector === 'this') {\r\n                this.items.push(this.el);\r\n            }\r\n            else if (this.settings.selector) {\r\n                if (typeof this.settings.selector === 'string') {\r\n                    if (this.settings.selectWithin) {\r\n                        var selectWithin = $LG(this.settings.selectWithin);\r\n                        this.items = selectWithin\r\n                            .find(this.settings.selector)\r\n                            .get();\r\n                    }\r\n                    else {\r\n                        this.items = this.el.querySelectorAll(this.settings.selector);\r\n                    }\r\n                }\r\n                else {\r\n                    this.items = this.settings.selector;\r\n                }\r\n            }\r\n            else {\r\n                this.items = this.el.children;\r\n            }\r\n            return utils.getDynamicOptions(this.items, this.settings.extraProps, this.settings.getCaptionFromTitleOrAlt, this.settings.exThumbImage);\r\n        }\r\n        else {\r\n            return this.settings.dynamicEl || [];\r\n        }\r\n    };\r\n    LightGallery.prototype.shouldHideScrollbar = function () {\r\n        return (this.settings.hideScrollbar &&\r\n            document.body === this.settings.container);\r\n    };\r\n    LightGallery.prototype.hideScrollbar = function () {\r\n        if (!this.shouldHideScrollbar()) {\r\n            return;\r\n        }\r\n        this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\r\n        var bodyRect = document.documentElement.getBoundingClientRect();\r\n        var scrollbarWidth = window.innerWidth - bodyRect.width;\r\n        $LG(document.body).css('padding-right', scrollbarWidth + this.bodyPaddingRight + 'px');\r\n        $LG(document.body).addClass('lg-overlay-open');\r\n    };\r\n    LightGallery.prototype.resetScrollBar = function () {\r\n        if (!this.shouldHideScrollbar()) {\r\n            return;\r\n        }\r\n        $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\r\n        $LG(document.body).removeClass('lg-overlay-open');\r\n    };\r\n    /**\r\n     * Open lightGallery.\r\n     * Open gallery with specific slide by passing index of the slide as parameter.\r\n     * @category lGPublicMethods\r\n     * @param {Number} index  - index of the slide\r\n     * @param {HTMLElement} element - Which image lightGallery should zoom from\r\n     *\r\n     * @example\r\n     * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\r\n     * const dynamicGallery = lightGallery($dynamicGallery, {\r\n     *     dynamic: true,\r\n     *     dynamicEl: [\r\n     *         {\r\n     *              src: 'img/1.jpg',\r\n     *              thumb: 'img/thumb-1.jpg',\r\n     *              subHtml: '<h4>Image 1 title</h4><p>Image 1 descriptions.</p>',\r\n     *         },\r\n     *         ...\r\n     *     ],\r\n     * });\r\n     * $dynamicGallery.addEventListener('click', function () {\r\n     *     // Starts with third item.(Optional).\r\n     *     // This is useful if you want use dynamic mode with\r\n     *     // custom thumbnails (thumbnails outside gallery),\r\n     *     dynamicGallery.openGallery(2);\r\n     * });\r\n     *\r\n     */\r\n    LightGallery.prototype.openGallery = function (index, element) {\r\n        var _this = this;\r\n        if (index === void 0) { index = this.settings.index; }\r\n        // prevent accidental double execution\r\n        if (this.lgOpened)\r\n            return;\r\n        this.lgOpened = true;\r\n        this.outer.removeClass('lg-hide-items');\r\n        this.hideScrollbar();\r\n        // Add display block, but still has opacity 0\r\n        this.$container.addClass('lg-show');\r\n        var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, index);\r\n        this.currentItemsInDom = itemsToBeInsertedToDom;\r\n        var items = '';\r\n        itemsToBeInsertedToDom.forEach(function (item) {\r\n            items = items + (\"<div id=\\\"\" + item + \"\\\" class=\\\"lg-item\\\"></div>\");\r\n        });\r\n        this.$inner.append(items);\r\n        this.addHtml(index);\r\n        var transform = '';\r\n        this.mediaContainerPosition = this.getMediaContainerPosition();\r\n        var _a = this.mediaContainerPosition, top = _a.top, bottom = _a.bottom;\r\n        if (!this.settings.allowMediaOverlap) {\r\n            this.setMediaContainerPosition(top, bottom);\r\n        }\r\n        var __slideVideoInfo = this.galleryItems[index].__slideVideoInfo;\r\n        if (this.zoomFromOrigin && element) {\r\n            this.currentImageSize = utils.getSize(element, this.outer, top + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n            transform = utils.getTransform(element, this.outer, top, bottom, this.currentImageSize);\r\n        }\r\n        if (!this.zoomFromOrigin || !transform) {\r\n            this.outer.addClass(this.settings.startClass);\r\n            this.getSlideItem(index).removeClass('lg-complete');\r\n        }\r\n        var timeout = this.settings.zoomFromOrigin\r\n            ? 100\r\n            : this.settings.backdropDuration;\r\n        setTimeout(function () {\r\n            _this.outer.addClass('lg-components-open');\r\n        }, timeout);\r\n        this.index = index;\r\n        this.LGel.trigger(lGEvents.beforeOpen);\r\n        // add class lg-current to remove initial transition\r\n        this.getSlideItem(index).addClass('lg-current');\r\n        this.lGalleryOn = false;\r\n        // Store the current scroll top value to scroll back after closing the gallery..\r\n        this.prevScrollTop = $LG(window).scrollTop();\r\n        setTimeout(function () {\r\n            // Need to check both zoomFromOrigin and transform values as we need to set set the\r\n            // default opening animation if user missed to add the lg-size attribute\r\n            if (_this.zoomFromOrigin && transform) {\r\n                var currentSlide_1 = _this.getSlideItem(index);\r\n                currentSlide_1.css('transform', transform);\r\n                setTimeout(function () {\r\n                    currentSlide_1\r\n                        .addClass('lg-start-progress lg-start-end-progress')\r\n                        .css('transition-duration', _this.settings.startAnimationDuration + 'ms');\r\n                    _this.outer.addClass('lg-zoom-from-image');\r\n                });\r\n                setTimeout(function () {\r\n                    currentSlide_1.css('transform', 'translate3d(0, 0, 0)');\r\n                }, 100);\r\n            }\r\n            setTimeout(function () {\r\n                _this.$backdrop.addClass('in');\r\n                _this.$container.addClass('lg-show-in');\r\n            }, 10);\r\n            setTimeout(function () {\r\n                if (_this.settings.trapFocus &&\r\n                    document.body === _this.settings.container) {\r\n                    _this.trapFocus();\r\n                }\r\n            }, _this.settings.backdropDuration + 50);\r\n            // lg-visible class resets gallery opacity to 1\r\n            if (!_this.zoomFromOrigin || !transform) {\r\n                setTimeout(function () {\r\n                    _this.outer.addClass('lg-visible');\r\n                }, _this.settings.backdropDuration);\r\n            }\r\n            // initiate slide function\r\n            _this.slide(index, false, false, false);\r\n            _this.LGel.trigger(lGEvents.afterOpen);\r\n        });\r\n        if (document.body === this.settings.container) {\r\n            $LG('html').addClass('lg-on');\r\n        }\r\n    };\r\n    /**\r\n     * Note - Changing the position of the media on every slide transition creates a flickering effect.\r\n     * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\r\n     * if you have dynamic captions for each media,\r\n     * you can provide an appropriate height for the captions via allowMediaOverlap option\r\n     */\r\n    LightGallery.prototype.getMediaContainerPosition = function () {\r\n        if (this.settings.allowMediaOverlap) {\r\n            return {\r\n                top: 0,\r\n                bottom: 0,\r\n            };\r\n        }\r\n        var top = this.$toolbar.get().clientHeight || 0;\r\n        var subHtml = this.outer.find('.lg-components .lg-sub-html').get();\r\n        var captionHeight = this.settings.defaultCaptionHeight ||\r\n            (subHtml && subHtml.clientHeight) ||\r\n            0;\r\n        var thumbContainer = this.outer.find('.lg-thumb-outer').get();\r\n        var thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\r\n        var bottom = thumbHeight + captionHeight;\r\n        return {\r\n            top: top,\r\n            bottom: bottom,\r\n        };\r\n    };\r\n    LightGallery.prototype.setMediaContainerPosition = function (top, bottom) {\r\n        if (top === void 0) { top = 0; }\r\n        if (bottom === void 0) { bottom = 0; }\r\n        this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\r\n    };\r\n    LightGallery.prototype.hideBars = function () {\r\n        var _this = this;\r\n        // Hide controllers if mouse doesn't move for some period\r\n        setTimeout(function () {\r\n            _this.outer.removeClass('lg-hide-items');\r\n            if (_this.settings.hideBarsDelay > 0) {\r\n                _this.outer.on('mousemove.lg click.lg touchstart.lg', function () {\r\n                    _this.outer.removeClass('lg-hide-items');\r\n                    clearTimeout(_this.hideBarTimeout);\r\n                    // Timeout will be cleared on each slide movement also\r\n                    _this.hideBarTimeout = setTimeout(function () {\r\n                        _this.outer.addClass('lg-hide-items');\r\n                    }, _this.settings.hideBarsDelay);\r\n                });\r\n                _this.outer.trigger('mousemove.lg');\r\n            }\r\n        }, this.settings.showBarsAfter);\r\n    };\r\n    LightGallery.prototype.initPictureFill = function ($img) {\r\n        if (this.settings.supportLegacyBrowser) {\r\n            try {\r\n                picturefill({\r\n                    elements: [$img.get()],\r\n                });\r\n            }\r\n            catch (e) {\r\n                console.warn('lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.');\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     *  @desc Create image counter\r\n     *  Ex: 1/10\r\n     */\r\n    LightGallery.prototype.counter = function () {\r\n        if (this.settings.counter) {\r\n            var counterHtml = \"<div class=\\\"lg-counter\\\" role=\\\"status\\\" aria-live=\\\"polite\\\">\\n                <span id=\\\"\" + this.getIdName('lg-counter-current') + \"\\\" class=\\\"lg-counter-current\\\">\" + (this.index + 1) + \" </span> /\\n                <span id=\\\"\" + this.getIdName('lg-counter-all') + \"\\\" class=\\\"lg-counter-all\\\">\" + this.galleryItems.length + \" </span></div>\";\r\n            this.outer.find(this.settings.appendCounterTo).append(counterHtml);\r\n        }\r\n    };\r\n    /**\r\n     *  @desc add sub-html into the slide\r\n     *  @param {Number} index - index of the slide\r\n     */\r\n    LightGallery.prototype.addHtml = function (index) {\r\n        var subHtml;\r\n        var subHtmlUrl;\r\n        if (this.galleryItems[index].subHtmlUrl) {\r\n            subHtmlUrl = this.galleryItems[index].subHtmlUrl;\r\n        }\r\n        else {\r\n            subHtml = this.galleryItems[index].subHtml;\r\n        }\r\n        if (!subHtmlUrl) {\r\n            if (subHtml) {\r\n                // get first letter of sub-html\r\n                // if first letter starts with . or # get the html form the jQuery object\r\n                var fL = subHtml.substring(0, 1);\r\n                if (fL === '.' || fL === '#') {\r\n                    if (this.settings.subHtmlSelectorRelative &&\r\n                        !this.settings.dynamic) {\r\n                        subHtml = $LG(this.items)\r\n                            .eq(index)\r\n                            .find(subHtml)\r\n                            .first()\r\n                            .html();\r\n                    }\r\n                    else {\r\n                        subHtml = $LG(subHtml).first().html();\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                subHtml = '';\r\n            }\r\n        }\r\n        if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n            if (subHtmlUrl) {\r\n                this.outer.find('.lg-sub-html').load(subHtmlUrl);\r\n            }\r\n            else {\r\n                this.outer.find('.lg-sub-html').html(subHtml);\r\n            }\r\n        }\r\n        else {\r\n            var currentSlide = $LG(this.getSlideItemId(index));\r\n            if (subHtmlUrl) {\r\n                currentSlide.load(subHtmlUrl);\r\n            }\r\n            else {\r\n                currentSlide.append(\"<div class=\\\"lg-sub-html\\\">\" + subHtml + \"</div>\");\r\n            }\r\n        }\r\n        // Add lg-empty-html class if title doesn't exist\r\n        if (typeof subHtml !== 'undefined' && subHtml !== null) {\r\n            if (subHtml === '') {\r\n                this.outer\r\n                    .find(this.settings.appendSubHtmlTo)\r\n                    .addClass('lg-empty-html');\r\n            }\r\n            else {\r\n                this.outer\r\n                    .find(this.settings.appendSubHtmlTo)\r\n                    .removeClass('lg-empty-html');\r\n            }\r\n        }\r\n        this.LGel.trigger(lGEvents.afterAppendSubHtml, {\r\n            index: index,\r\n        });\r\n    };\r\n    /**\r\n     *  @desc Preload slides\r\n     *  @param {Number} index - index of the slide\r\n     * @todo preload not working for the first slide, Also, should work for the first and last slide as well\r\n     */\r\n    LightGallery.prototype.preload = function (index) {\r\n        for (var i = 1; i <= this.settings.preload; i++) {\r\n            if (i >= this.galleryItems.length - index) {\r\n                break;\r\n            }\r\n            this.loadContent(index + i, false);\r\n        }\r\n        for (var j = 1; j <= this.settings.preload; j++) {\r\n            if (index - j < 0) {\r\n                break;\r\n            }\r\n            this.loadContent(index - j, false);\r\n        }\r\n    };\r\n    LightGallery.prototype.getDummyImgStyles = function (imageSize) {\r\n        if (!imageSize)\r\n            return '';\r\n        return \"width:\" + imageSize.width + \"px;\\n                margin-left: -\" + imageSize.width / 2 + \"px;\\n                margin-top: -\" + imageSize.height / 2 + \"px;\\n                height:\" + imageSize.height + \"px\";\r\n    };\r\n    LightGallery.prototype.getVideoContStyle = function (imageSize) {\r\n        if (!imageSize)\r\n            return '';\r\n        return \"width:\" + imageSize.width + \"px;\\n                height:\" + imageSize.height + \"px\";\r\n    };\r\n    LightGallery.prototype.getDummyImageContent = function ($currentSlide, index, alt) {\r\n        var $currentItem;\r\n        if (!this.settings.dynamic) {\r\n            $currentItem = $LG(this.items).eq(index);\r\n        }\r\n        if ($currentItem) {\r\n            var _dummyImgSrc = void 0;\r\n            if (!this.settings.exThumbImage) {\r\n                _dummyImgSrc = $currentItem.find('img').first().attr('src');\r\n            }\r\n            else {\r\n                _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\r\n            }\r\n            if (!_dummyImgSrc)\r\n                return '';\r\n            var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n            var dummyImgContent = \"<img \" + alt + \" style=\\\"\" + imgStyle + \"\\\" class=\\\"lg-dummy-img\\\" src=\\\"\" + _dummyImgSrc + \"\\\" />\";\r\n            $currentSlide.addClass('lg-first-slide');\r\n            this.outer.addClass('lg-first-slide-loading');\r\n            return dummyImgContent;\r\n        }\r\n        return '';\r\n    };\r\n    LightGallery.prototype.setImgMarkup = function (src, $currentSlide, index) {\r\n        var currentGalleryItem = this.galleryItems[index];\r\n        var alt = currentGalleryItem.alt, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n        // Use the thumbnail as dummy image which will be resized to actual image size and\r\n        // displayed on top of actual image\r\n        var imgContent = '';\r\n        var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n        if (this.isFirstSlideWithZoomAnimation()) {\r\n            imgContent = this.getDummyImageContent($currentSlide, index, altAttr);\r\n        }\r\n        else {\r\n            imgContent = utils.getImgMarkup(index, src, altAttr, srcset, sizes, sources);\r\n        }\r\n        var imgMarkup = \"<picture class=\\\"lg-img-wrap\\\"> \" + imgContent + \"</picture>\";\r\n        $currentSlide.prepend(imgMarkup);\r\n    };\r\n    LightGallery.prototype.onSlideObjectLoad = function ($slide, isHTML5VideoWithoutPoster, onLoad, onError) {\r\n        var mediaObject = $slide.find('.lg-object').first();\r\n        if (utils.isImageLoaded(mediaObject.get()) ||\r\n            isHTML5VideoWithoutPoster) {\r\n            onLoad();\r\n        }\r\n        else {\r\n            mediaObject.on('load.lg error.lg', function () {\r\n                onLoad && onLoad();\r\n            });\r\n            mediaObject.on('error.lg', function () {\r\n                onError && onError();\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     *\r\n     * @param $el Current slide item\r\n     * @param index\r\n     * @param delay Delay is 0 except first time\r\n     * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\r\n     * @param isFirstSlide\r\n     */\r\n    LightGallery.prototype.onLgObjectLoad = function (currentSlide, index, delay, speed, isFirstSlide, isHTML5VideoWithoutPoster) {\r\n        var _this = this;\r\n        this.onSlideObjectLoad(currentSlide, isHTML5VideoWithoutPoster, function () {\r\n            _this.triggerSlideItemLoad(currentSlide, index, delay, speed, isFirstSlide);\r\n        }, function () {\r\n            currentSlide.addClass('lg-complete lg-complete_');\r\n            currentSlide.html('<span class=\"lg-error-msg\">' +\r\n                _this.settings.strings['mediaLoadingFailed'] +\r\n                '</span>');\r\n        });\r\n    };\r\n    LightGallery.prototype.triggerSlideItemLoad = function ($currentSlide, index, delay, speed, isFirstSlide) {\r\n        var _this = this;\r\n        var currentGalleryItem = this.galleryItems[index];\r\n        // Adding delay for video slides without poster for better performance and user experience\r\n        // Videos should start playing once once the gallery is completely loaded\r\n        var _speed = isFirstSlide &&\r\n            this.getSlideType(currentGalleryItem) === 'video' &&\r\n            !currentGalleryItem.poster\r\n            ? speed\r\n            : 0;\r\n        setTimeout(function () {\r\n            $currentSlide.addClass('lg-complete lg-complete_');\r\n            _this.LGel.trigger(lGEvents.slideItemLoad, {\r\n                index: index,\r\n                delay: delay || 0,\r\n                isFirstSlide: isFirstSlide,\r\n            });\r\n        }, _speed);\r\n    };\r\n    LightGallery.prototype.isFirstSlideWithZoomAnimation = function () {\r\n        return !!(!this.lGalleryOn &&\r\n            this.zoomFromOrigin &&\r\n            this.currentImageSize);\r\n    };\r\n    // Add video slideInfo\r\n    LightGallery.prototype.addSlideVideoInfo = function (items) {\r\n        var _this = this;\r\n        items.forEach(function (element, index) {\r\n            element.__slideVideoInfo = utils.isVideo(element.src, !!element.video, index);\r\n            if (element.__slideVideoInfo &&\r\n                _this.settings.loadYouTubePoster &&\r\n                !element.poster &&\r\n                element.__slideVideoInfo.youtube) {\r\n                element.poster = \"//img.youtube.com/vi/\" + element.__slideVideoInfo.youtube[1] + \"/maxresdefault.jpg\";\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     *  Load slide content into slide.\r\n     *  This is used to load content into slides that is not visible too\r\n     *  @param {Number} index - index of the slide.\r\n     *  @param {Boolean} rec - if true call loadcontent() function again.\r\n     */\r\n    LightGallery.prototype.loadContent = function (index, rec) {\r\n        var _this = this;\r\n        var currentGalleryItem = this.galleryItems[index];\r\n        var $currentSlide = $LG(this.getSlideItemId(index));\r\n        var poster = currentGalleryItem.poster, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n        var src = currentGalleryItem.src;\r\n        var video = currentGalleryItem.video;\r\n        var _html5Video = video && typeof video === 'string' ? JSON.parse(video) : video;\r\n        if (currentGalleryItem.responsive) {\r\n            var srcDyItms = currentGalleryItem.responsive.split(',');\r\n            src = utils.getResponsiveSrc(srcDyItms) || src;\r\n        }\r\n        var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n        var lgVideoStyle = '';\r\n        var iframe = !!currentGalleryItem.iframe;\r\n        var isFirstSlide = !this.lGalleryOn;\r\n        // delay for adding complete class. it is 0 except first time.\r\n        var delay = 0;\r\n        if (isFirstSlide) {\r\n            if (this.zoomFromOrigin && this.currentImageSize) {\r\n                delay = this.settings.startAnimationDuration + 10;\r\n            }\r\n            else {\r\n                delay = this.settings.backdropDuration + 10;\r\n            }\r\n        }\r\n        if (!$currentSlide.hasClass('lg-loaded')) {\r\n            if (videoInfo) {\r\n                var _a = this.mediaContainerPosition, top_2 = _a.top, bottom = _a.bottom;\r\n                var videoSize = utils.getSize(this.items[index], this.outer, top_2 + bottom, videoInfo && this.settings.videoMaxSize);\r\n                lgVideoStyle = this.getVideoContStyle(videoSize);\r\n            }\r\n            if (iframe) {\r\n                var markup = utils.getIframeMarkup(this.settings.iframeWidth, this.settings.iframeHeight, this.settings.iframeMaxWidth, this.settings.iframeMaxHeight, src, currentGalleryItem.iframeTitle);\r\n                $currentSlide.prepend(markup);\r\n            }\r\n            else if (poster) {\r\n                var dummyImg = '';\r\n                var hasStartAnimation = isFirstSlide &&\r\n                    this.zoomFromOrigin &&\r\n                    this.currentImageSize;\r\n                if (hasStartAnimation) {\r\n                    dummyImg = this.getDummyImageContent($currentSlide, index, '');\r\n                }\r\n                var markup = utils.getVideoPosterMarkup(poster, dummyImg || '', lgVideoStyle, this.settings.strings['playVideo'], videoInfo);\r\n                $currentSlide.prepend(markup);\r\n            }\r\n            else if (videoInfo) {\r\n                var markup = \"<div class=\\\"lg-video-cont \\\" style=\\\"\" + lgVideoStyle + \"\\\"></div>\";\r\n                $currentSlide.prepend(markup);\r\n            }\r\n            else {\r\n                this.setImgMarkup(src, $currentSlide, index);\r\n                if (srcset || sources) {\r\n                    var $img = $currentSlide.find('.lg-object');\r\n                    this.initPictureFill($img);\r\n                }\r\n            }\r\n            if (poster || videoInfo) {\r\n                this.LGel.trigger(lGEvents.hasVideo, {\r\n                    index: index,\r\n                    src: src,\r\n                    html5Video: _html5Video,\r\n                    hasPoster: !!poster,\r\n                });\r\n            }\r\n            this.LGel.trigger(lGEvents.afterAppendSlide, { index: index });\r\n            if (this.lGalleryOn &&\r\n                this.settings.appendSubHtmlTo === '.lg-item') {\r\n                this.addHtml(index);\r\n            }\r\n        }\r\n        // For first time add some delay for displaying the start animation.\r\n        var _speed = 0;\r\n        // Do not change the delay value because it is required for zoom plugin.\r\n        // If gallery opened from direct url (hash) speed value should be 0\r\n        if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\r\n            _speed = delay;\r\n        }\r\n        // Only for first slide and zoomFromOrigin is enabled\r\n        if (this.isFirstSlideWithZoomAnimation()) {\r\n            setTimeout(function () {\r\n                $currentSlide\r\n                    .removeClass('lg-start-end-progress lg-start-progress')\r\n                    .removeAttr('style');\r\n            }, this.settings.startAnimationDuration + 100);\r\n            if (!$currentSlide.hasClass('lg-loaded')) {\r\n                setTimeout(function () {\r\n                    if (_this.getSlideType(currentGalleryItem) === 'image') {\r\n                        var alt = currentGalleryItem.alt;\r\n                        var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n                        $currentSlide\r\n                            .find('.lg-img-wrap')\r\n                            .append(utils.getImgMarkup(index, src, altAttr, srcset, sizes, currentGalleryItem.sources));\r\n                        if (srcset || sources) {\r\n                            var $img = $currentSlide.find('.lg-object');\r\n                            _this.initPictureFill($img);\r\n                        }\r\n                    }\r\n                    if (_this.getSlideType(currentGalleryItem) === 'image' ||\r\n                        (_this.getSlideType(currentGalleryItem) === 'video' &&\r\n                            poster)) {\r\n                        _this.onLgObjectLoad($currentSlide, index, delay, _speed, true, false);\r\n                        // load remaining slides once the slide is completely loaded\r\n                        _this.onSlideObjectLoad($currentSlide, !!(videoInfo && videoInfo.html5 && !poster), function () {\r\n                            _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n                        }, function () {\r\n                            _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n                        });\r\n                    }\r\n                }, this.settings.startAnimationDuration + 100);\r\n            }\r\n        }\r\n        // SLide content has been added to dom\r\n        $currentSlide.addClass('lg-loaded');\r\n        if (!this.isFirstSlideWithZoomAnimation() ||\r\n            (this.getSlideType(currentGalleryItem) === 'video' && !poster)) {\r\n            this.onLgObjectLoad($currentSlide, index, delay, _speed, isFirstSlide, !!(videoInfo && videoInfo.html5 && !poster));\r\n        }\r\n        // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\r\n        if ((!this.zoomFromOrigin || !this.currentImageSize) &&\r\n            $currentSlide.hasClass('lg-complete_') &&\r\n            !this.lGalleryOn) {\r\n            setTimeout(function () {\r\n                $currentSlide.addClass('lg-complete');\r\n            }, this.settings.backdropDuration);\r\n        }\r\n        // Content loaded\r\n        // Need to set lGalleryOn before calling preload function\r\n        this.lGalleryOn = true;\r\n        if (rec === true) {\r\n            if (!$currentSlide.hasClass('lg-complete_')) {\r\n                $currentSlide\r\n                    .find('.lg-object')\r\n                    .first()\r\n                    .on('load.lg error.lg', function () {\r\n                    _this.preload(index);\r\n                });\r\n            }\r\n            else {\r\n                this.preload(index);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @desc Remove dummy image content and load next slides\r\n     * Called only for the first time if zoomFromOrigin animation is enabled\r\n     * @param index\r\n     * @param $currentSlide\r\n     * @param speed\r\n     */\r\n    LightGallery.prototype.loadContentOnFirstSlideLoad = function (index, $currentSlide, speed) {\r\n        var _this = this;\r\n        setTimeout(function () {\r\n            $currentSlide.find('.lg-dummy-img').remove();\r\n            $currentSlide.removeClass('lg-first-slide');\r\n            _this.outer.removeClass('lg-first-slide-loading');\r\n            _this.isDummyImageRemoved = true;\r\n            _this.preload(index);\r\n        }, speed + 300);\r\n    };\r\n    LightGallery.prototype.getItemsToBeInsertedToDom = function (index, prevIndex, numberOfItems) {\r\n        var _this = this;\r\n        if (numberOfItems === void 0) { numberOfItems = 0; }\r\n        var itemsToBeInsertedToDom = [];\r\n        // Minimum 2 items should be there\r\n        var possibleNumberOfItems = Math.max(numberOfItems, 3);\r\n        possibleNumberOfItems = Math.min(possibleNumberOfItems, this.galleryItems.length);\r\n        var prevIndexItem = \"lg-item-\" + this.lgId + \"-\" + prevIndex;\r\n        if (this.galleryItems.length <= 3) {\r\n            this.galleryItems.forEach(function (_element, index) {\r\n                itemsToBeInsertedToDom.push(\"lg-item-\" + _this.lgId + \"-\" + index);\r\n            });\r\n            return itemsToBeInsertedToDom;\r\n        }\r\n        if (index < (this.galleryItems.length - 1) / 2) {\r\n            for (var idx = index; idx > index - possibleNumberOfItems / 2 && idx >= 0; idx--) {\r\n                itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n            }\r\n            var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n            for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n                itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index + idx + 1));\r\n            }\r\n        }\r\n        else {\r\n            for (var idx = index; idx <= this.galleryItems.length - 1 &&\r\n                idx < index + possibleNumberOfItems / 2; idx++) {\r\n                itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n            }\r\n            var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n            for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n                itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index - idx - 1));\r\n            }\r\n        }\r\n        if (this.settings.loop) {\r\n            if (index === this.galleryItems.length - 1) {\r\n                itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + 0);\r\n            }\r\n            else if (index === 0) {\r\n                itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (this.galleryItems.length - 1));\r\n            }\r\n        }\r\n        if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\r\n            itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + prevIndex);\r\n        }\r\n        return itemsToBeInsertedToDom;\r\n    };\r\n    LightGallery.prototype.organizeSlideItems = function (index, prevIndex) {\r\n        var _this = this;\r\n        var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, prevIndex, this.settings.numberOfSlideItemsInDom);\r\n        itemsToBeInsertedToDom.forEach(function (item) {\r\n            if (_this.currentItemsInDom.indexOf(item) === -1) {\r\n                _this.$inner.append(\"<div id=\\\"\" + item + \"\\\" class=\\\"lg-item\\\"></div>\");\r\n            }\r\n        });\r\n        this.currentItemsInDom.forEach(function (item) {\r\n            if (itemsToBeInsertedToDom.indexOf(item) === -1) {\r\n                $LG(\"#\" + item).remove();\r\n            }\r\n        });\r\n        return itemsToBeInsertedToDom;\r\n    };\r\n    /**\r\n     * Get previous index of the slide\r\n     */\r\n    LightGallery.prototype.getPreviousSlideIndex = function () {\r\n        var prevIndex = 0;\r\n        try {\r\n            var currentItemId = this.outer\r\n                .find('.lg-current')\r\n                .first()\r\n                .attr('id');\r\n            prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\r\n        }\r\n        catch (error) {\r\n            prevIndex = 0;\r\n        }\r\n        return prevIndex;\r\n    };\r\n    LightGallery.prototype.setDownloadValue = function (index) {\r\n        if (this.settings.download) {\r\n            var currentGalleryItem = this.galleryItems[index];\r\n            var hideDownloadBtn = currentGalleryItem.downloadUrl === false ||\r\n                currentGalleryItem.downloadUrl === 'false';\r\n            if (hideDownloadBtn) {\r\n                this.outer.addClass('lg-hide-download');\r\n            }\r\n            else {\r\n                var $download = this.getElementById('lg-download');\r\n                this.outer.removeClass('lg-hide-download');\r\n                $download.attr('href', currentGalleryItem.downloadUrl ||\r\n                    currentGalleryItem.src);\r\n                if (currentGalleryItem.download) {\r\n                    $download.attr('download', currentGalleryItem.download);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    LightGallery.prototype.makeSlideAnimation = function (direction, currentSlideItem, previousSlideItem) {\r\n        var _this = this;\r\n        if (this.lGalleryOn) {\r\n            previousSlideItem.addClass('lg-slide-progress');\r\n        }\r\n        setTimeout(function () {\r\n            // remove all transitions\r\n            _this.outer.addClass('lg-no-trans');\r\n            _this.outer\r\n                .find('.lg-item')\r\n                .removeClass('lg-prev-slide lg-next-slide');\r\n            if (direction === 'prev') {\r\n                //prevslide\r\n                currentSlideItem.addClass('lg-prev-slide');\r\n                previousSlideItem.addClass('lg-next-slide');\r\n            }\r\n            else {\r\n                // next slide\r\n                currentSlideItem.addClass('lg-next-slide');\r\n                previousSlideItem.addClass('lg-prev-slide');\r\n            }\r\n            // give 50 ms for browser to add/remove class\r\n            setTimeout(function () {\r\n                _this.outer.find('.lg-item').removeClass('lg-current');\r\n                currentSlideItem.addClass('lg-current');\r\n                // reset all transitions\r\n                _this.outer.removeClass('lg-no-trans');\r\n            }, 50);\r\n        }, this.lGalleryOn ? this.settings.slideDelay : 0);\r\n    };\r\n    /**\r\n     * Goto a specific slide.\r\n     * @param {Number} index - index of the slide\r\n     * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\r\n     * @param {Boolean} fromThumb - true if slide function called via thumbnail click\r\n     * @param {String} direction - Direction of the slide(next/prev)\r\n     * @category lGPublicMethods\r\n     * @example\r\n     *  const plugin = lightGallery();\r\n     *  // to go to 3rd slide\r\n     *  plugin.slide(2);\r\n     *\r\n     */\r\n    LightGallery.prototype.slide = function (index, fromTouch, fromThumb, direction) {\r\n        var _this = this;\r\n        var prevIndex = this.getPreviousSlideIndex();\r\n        this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\r\n        // Prevent multiple call, Required for hsh plugin\r\n        if (this.lGalleryOn && prevIndex === index) {\r\n            return;\r\n        }\r\n        var numberOfGalleryItems = this.galleryItems.length;\r\n        if (!this.lgBusy) {\r\n            if (this.settings.counter) {\r\n                this.updateCurrentCounter(index);\r\n            }\r\n            var currentSlideItem = this.getSlideItem(index);\r\n            var previousSlideItem_1 = this.getSlideItem(prevIndex);\r\n            var currentGalleryItem = this.galleryItems[index];\r\n            var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n            this.outer.attr('data-lg-slide-type', this.getSlideType(currentGalleryItem));\r\n            this.setDownloadValue(index);\r\n            if (videoInfo) {\r\n                var _a = this.mediaContainerPosition, top_3 = _a.top, bottom = _a.bottom;\r\n                var videoSize = utils.getSize(this.items[index], this.outer, top_3 + bottom, videoInfo && this.settings.videoMaxSize);\r\n                this.resizeVideoSlide(index, videoSize);\r\n            }\r\n            this.LGel.trigger(lGEvents.beforeSlide, {\r\n                prevIndex: prevIndex,\r\n                index: index,\r\n                fromTouch: !!fromTouch,\r\n                fromThumb: !!fromThumb,\r\n            });\r\n            this.lgBusy = true;\r\n            clearTimeout(this.hideBarTimeout);\r\n            this.arrowDisable(index);\r\n            if (!direction) {\r\n                if (index < prevIndex) {\r\n                    direction = 'prev';\r\n                }\r\n                else if (index > prevIndex) {\r\n                    direction = 'next';\r\n                }\r\n            }\r\n            if (!fromTouch) {\r\n                this.makeSlideAnimation(direction, currentSlideItem, previousSlideItem_1);\r\n            }\r\n            else {\r\n                this.outer\r\n                    .find('.lg-item')\r\n                    .removeClass('lg-prev-slide lg-current lg-next-slide');\r\n                var touchPrev = void 0;\r\n                var touchNext = void 0;\r\n                if (numberOfGalleryItems > 2) {\r\n                    touchPrev = index - 1;\r\n                    touchNext = index + 1;\r\n                    if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\r\n                        // next slide\r\n                        touchNext = 0;\r\n                        touchPrev = numberOfGalleryItems - 1;\r\n                    }\r\n                    else if (index === numberOfGalleryItems - 1 &&\r\n                        prevIndex === 0) {\r\n                        // prev slide\r\n                        touchNext = 0;\r\n                        touchPrev = numberOfGalleryItems - 1;\r\n                    }\r\n                }\r\n                else {\r\n                    touchPrev = 0;\r\n                    touchNext = 1;\r\n                }\r\n                if (direction === 'prev') {\r\n                    this.getSlideItem(touchNext).addClass('lg-next-slide');\r\n                }\r\n                else {\r\n                    this.getSlideItem(touchPrev).addClass('lg-prev-slide');\r\n                }\r\n                currentSlideItem.addClass('lg-current');\r\n            }\r\n            // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\r\n            if (!this.lGalleryOn) {\r\n                this.loadContent(index, true);\r\n            }\r\n            else {\r\n                setTimeout(function () {\r\n                    _this.loadContent(index, true);\r\n                    // Add title if this.settings.appendSubHtmlTo === lg-sub-html\r\n                    if (_this.settings.appendSubHtmlTo !== '.lg-item') {\r\n                        _this.addHtml(index);\r\n                    }\r\n                }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\r\n            }\r\n            setTimeout(function () {\r\n                _this.lgBusy = false;\r\n                previousSlideItem_1.removeClass('lg-slide-progress');\r\n                _this.LGel.trigger(lGEvents.afterSlide, {\r\n                    prevIndex: prevIndex,\r\n                    index: index,\r\n                    fromTouch: fromTouch,\r\n                    fromThumb: fromThumb,\r\n                });\r\n            }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\r\n        }\r\n        this.index = index;\r\n    };\r\n    LightGallery.prototype.updateCurrentCounter = function (index) {\r\n        this.getElementById('lg-counter-current').html(index + 1 + '');\r\n    };\r\n    LightGallery.prototype.updateCounterTotal = function () {\r\n        this.getElementById('lg-counter-all').html(this.galleryItems.length + '');\r\n    };\r\n    LightGallery.prototype.getSlideType = function (item) {\r\n        if (item.__slideVideoInfo) {\r\n            return 'video';\r\n        }\r\n        else if (item.iframe) {\r\n            return 'iframe';\r\n        }\r\n        else {\r\n            return 'image';\r\n        }\r\n    };\r\n    LightGallery.prototype.touchMove = function (startCoords, endCoords, e) {\r\n        var distanceX = endCoords.pageX - startCoords.pageX;\r\n        var distanceY = endCoords.pageY - startCoords.pageY;\r\n        var allowSwipe = false;\r\n        if (this.swipeDirection) {\r\n            allowSwipe = true;\r\n        }\r\n        else {\r\n            if (Math.abs(distanceX) > 15) {\r\n                this.swipeDirection = 'horizontal';\r\n                allowSwipe = true;\r\n            }\r\n            else if (Math.abs(distanceY) > 15) {\r\n                this.swipeDirection = 'vertical';\r\n                allowSwipe = true;\r\n            }\r\n        }\r\n        if (!allowSwipe) {\r\n            return;\r\n        }\r\n        var $currentSlide = this.getSlideItem(this.index);\r\n        if (this.swipeDirection === 'horizontal') {\r\n            e === null || e === void 0 ? void 0 : e.preventDefault();\r\n            // reset opacity and transition duration\r\n            this.outer.addClass('lg-dragging');\r\n            // move current slide\r\n            this.setTranslate($currentSlide, distanceX, 0);\r\n            // move next and prev slide with current slide\r\n            var width = $currentSlide.get().offsetWidth;\r\n            var slideWidthAmount = (width * 15) / 100;\r\n            var gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\r\n            this.setTranslate(this.outer.find('.lg-prev-slide').first(), -width + distanceX - gutter, 0);\r\n            this.setTranslate(this.outer.find('.lg-next-slide').first(), width + distanceX + gutter, 0);\r\n        }\r\n        else if (this.swipeDirection === 'vertical') {\r\n            if (this.settings.swipeToClose) {\r\n                e === null || e === void 0 ? void 0 : e.preventDefault();\r\n                this.$container.addClass('lg-dragging-vertical');\r\n                var opacity = 1 - Math.abs(distanceY) / window.innerHeight;\r\n                this.$backdrop.css('opacity', opacity);\r\n                var scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\r\n                this.setTranslate($currentSlide, 0, distanceY, scale, scale);\r\n                if (Math.abs(distanceY) > 100) {\r\n                    this.outer\r\n                        .addClass('lg-hide-items')\r\n                        .removeClass('lg-components-open');\r\n                }\r\n            }\r\n        }\r\n    };\r\n    LightGallery.prototype.touchEnd = function (endCoords, startCoords, event) {\r\n        var _this = this;\r\n        var distance;\r\n        // keep slide animation for any mode while dragg/swipe\r\n        if (this.settings.mode !== 'lg-slide') {\r\n            this.outer.addClass('lg-slide');\r\n        }\r\n        // set transition duration\r\n        setTimeout(function () {\r\n            _this.$container.removeClass('lg-dragging-vertical');\r\n            _this.outer\r\n                .removeClass('lg-dragging lg-hide-items')\r\n                .addClass('lg-components-open');\r\n            var triggerClick = true;\r\n            if (_this.swipeDirection === 'horizontal') {\r\n                distance = endCoords.pageX - startCoords.pageX;\r\n                var distanceAbs = Math.abs(endCoords.pageX - startCoords.pageX);\r\n                if (distance < 0 &&\r\n                    distanceAbs > _this.settings.swipeThreshold) {\r\n                    _this.goToNextSlide(true);\r\n                    triggerClick = false;\r\n                }\r\n                else if (distance > 0 &&\r\n                    distanceAbs > _this.settings.swipeThreshold) {\r\n                    _this.goToPrevSlide(true);\r\n                    triggerClick = false;\r\n                }\r\n            }\r\n            else if (_this.swipeDirection === 'vertical') {\r\n                distance = Math.abs(endCoords.pageY - startCoords.pageY);\r\n                if (_this.settings.closable &&\r\n                    _this.settings.swipeToClose &&\r\n                    distance > 100) {\r\n                    _this.closeGallery();\r\n                    return;\r\n                }\r\n                else {\r\n                    _this.$backdrop.css('opacity', 1);\r\n                }\r\n            }\r\n            _this.outer.find('.lg-item').removeAttr('style');\r\n            if (triggerClick &&\r\n                Math.abs(endCoords.pageX - startCoords.pageX) < 5) {\r\n                // Trigger click if distance is less than 5 pix\r\n                var target = $LG(event.target);\r\n                if (_this.isPosterElement(target)) {\r\n                    _this.LGel.trigger(lGEvents.posterClick);\r\n                }\r\n            }\r\n            _this.swipeDirection = undefined;\r\n        });\r\n        // remove slide class once drag/swipe is completed if mode is not slide\r\n        setTimeout(function () {\r\n            if (!_this.outer.hasClass('lg-dragging') &&\r\n                _this.settings.mode !== 'lg-slide') {\r\n                _this.outer.removeClass('lg-slide');\r\n            }\r\n        }, this.settings.speed + 100);\r\n    };\r\n    LightGallery.prototype.enableSwipe = function () {\r\n        var _this = this;\r\n        var startCoords = {};\r\n        var endCoords = {};\r\n        var isMoved = false;\r\n        var isSwiping = false;\r\n        if (this.settings.enableSwipe) {\r\n            this.$inner.on('touchstart.lg', function (e) {\r\n                _this.dragOrSwipeEnabled = true;\r\n                var $item = _this.getSlideItem(_this.index);\r\n                if (($LG(e.target).hasClass('lg-item') ||\r\n                    $item.get().contains(e.target)) &&\r\n                    !_this.outer.hasClass('lg-zoomed') &&\r\n                    !_this.lgBusy &&\r\n                    e.touches.length === 1) {\r\n                    isSwiping = true;\r\n                    _this.touchAction = 'swipe';\r\n                    _this.manageSwipeClass();\r\n                    startCoords = {\r\n                        pageX: e.touches[0].pageX,\r\n                        pageY: e.touches[0].pageY,\r\n                    };\r\n                }\r\n            });\r\n            this.$inner.on('touchmove.lg', function (e) {\r\n                if (isSwiping &&\r\n                    _this.touchAction === 'swipe' &&\r\n                    e.touches.length === 1) {\r\n                    endCoords = {\r\n                        pageX: e.touches[0].pageX,\r\n                        pageY: e.touches[0].pageY,\r\n                    };\r\n                    _this.touchMove(startCoords, endCoords, e);\r\n                    isMoved = true;\r\n                }\r\n            });\r\n            this.$inner.on('touchend.lg', function (event) {\r\n                if (_this.touchAction === 'swipe') {\r\n                    if (isMoved) {\r\n                        isMoved = false;\r\n                        _this.touchEnd(endCoords, startCoords, event);\r\n                    }\r\n                    else if (isSwiping) {\r\n                        var target = $LG(event.target);\r\n                        if (_this.isPosterElement(target)) {\r\n                            _this.LGel.trigger(lGEvents.posterClick);\r\n                        }\r\n                    }\r\n                    _this.touchAction = undefined;\r\n                    isSwiping = false;\r\n                }\r\n            });\r\n        }\r\n    };\r\n    LightGallery.prototype.enableDrag = function () {\r\n        var _this = this;\r\n        var startCoords = {};\r\n        var endCoords = {};\r\n        var isDraging = false;\r\n        var isMoved = false;\r\n        if (this.settings.enableDrag) {\r\n            this.outer.on('mousedown.lg', function (e) {\r\n                _this.dragOrSwipeEnabled = true;\r\n                var $item = _this.getSlideItem(_this.index);\r\n                if ($LG(e.target).hasClass('lg-item') ||\r\n                    $item.get().contains(e.target)) {\r\n                    if (!_this.outer.hasClass('lg-zoomed') && !_this.lgBusy) {\r\n                        e.preventDefault();\r\n                        if (!_this.lgBusy) {\r\n                            _this.manageSwipeClass();\r\n                            startCoords = {\r\n                                pageX: e.pageX,\r\n                                pageY: e.pageY,\r\n                            };\r\n                            isDraging = true;\r\n                            // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\r\n                            _this.outer.get().scrollLeft += 1;\r\n                            _this.outer.get().scrollLeft -= 1;\r\n                            // *\r\n                            _this.outer\r\n                                .removeClass('lg-grab')\r\n                                .addClass('lg-grabbing');\r\n                            _this.LGel.trigger(lGEvents.dragStart);\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n            $LG(window).on(\"mousemove.lg.global\" + this.lgId, function (e) {\r\n                if (isDraging && _this.lgOpened) {\r\n                    isMoved = true;\r\n                    endCoords = {\r\n                        pageX: e.pageX,\r\n                        pageY: e.pageY,\r\n                    };\r\n                    _this.touchMove(startCoords, endCoords);\r\n                    _this.LGel.trigger(lGEvents.dragMove);\r\n                }\r\n            });\r\n            $LG(window).on(\"mouseup.lg.global\" + this.lgId, function (event) {\r\n                if (!_this.lgOpened) {\r\n                    return;\r\n                }\r\n                var target = $LG(event.target);\r\n                if (isMoved) {\r\n                    isMoved = false;\r\n                    _this.touchEnd(endCoords, startCoords, event);\r\n                    _this.LGel.trigger(lGEvents.dragEnd);\r\n                }\r\n                else if (_this.isPosterElement(target)) {\r\n                    _this.LGel.trigger(lGEvents.posterClick);\r\n                }\r\n                // Prevent execution on click\r\n                if (isDraging) {\r\n                    isDraging = false;\r\n                    _this.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n                }\r\n            });\r\n        }\r\n    };\r\n    LightGallery.prototype.triggerPosterClick = function () {\r\n        var _this = this;\r\n        this.$inner.on('click.lg', function (event) {\r\n            if (!_this.dragOrSwipeEnabled &&\r\n                _this.isPosterElement($LG(event.target))) {\r\n                _this.LGel.trigger(lGEvents.posterClick);\r\n            }\r\n        });\r\n    };\r\n    LightGallery.prototype.manageSwipeClass = function () {\r\n        var _touchNext = this.index + 1;\r\n        var _touchPrev = this.index - 1;\r\n        if (this.settings.loop && this.galleryItems.length > 2) {\r\n            if (this.index === 0) {\r\n                _touchPrev = this.galleryItems.length - 1;\r\n            }\r\n            else if (this.index === this.galleryItems.length - 1) {\r\n                _touchNext = 0;\r\n            }\r\n        }\r\n        this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\r\n        if (_touchPrev > -1) {\r\n            this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\r\n        }\r\n        this.getSlideItem(_touchNext).addClass('lg-next-slide');\r\n    };\r\n    /**\r\n     * Go to next slide\r\n     * @param {Boolean} fromTouch - true if slide function called via touch event\r\n     * @category lGPublicMethods\r\n     * @example\r\n     *  const plugin = lightGallery();\r\n     *  plugin.goToNextSlide();\r\n     * @see <a href=\"/demos/methods/\">Demo</a>\r\n     */\r\n    LightGallery.prototype.goToNextSlide = function (fromTouch) {\r\n        var _this = this;\r\n        var _loop = this.settings.loop;\r\n        if (fromTouch && this.galleryItems.length < 3) {\r\n            _loop = false;\r\n        }\r\n        if (!this.lgBusy) {\r\n            if (this.index + 1 < this.galleryItems.length) {\r\n                this.index++;\r\n                this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n                    index: this.index,\r\n                });\r\n                this.slide(this.index, !!fromTouch, false, 'next');\r\n            }\r\n            else {\r\n                if (_loop) {\r\n                    this.index = 0;\r\n                    this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n                        index: this.index,\r\n                    });\r\n                    this.slide(this.index, !!fromTouch, false, 'next');\r\n                }\r\n                else if (this.settings.slideEndAnimation && !fromTouch) {\r\n                    this.outer.addClass('lg-right-end');\r\n                    setTimeout(function () {\r\n                        _this.outer.removeClass('lg-right-end');\r\n                    }, 400);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Go to previous slides\r\n     * @param {Boolean} fromTouch - true if slide function called via touch event\r\n     * @category lGPublicMethods\r\n     * @example\r\n     *  const plugin = lightGallery({});\r\n     *  plugin.goToPrevSlide();\r\n     * @see <a href=\"/demos/methods/\">Demo</a>\r\n     *\r\n     */\r\n    LightGallery.prototype.goToPrevSlide = function (fromTouch) {\r\n        var _this = this;\r\n        var _loop = this.settings.loop;\r\n        if (fromTouch && this.galleryItems.length < 3) {\r\n            _loop = false;\r\n        }\r\n        if (!this.lgBusy) {\r\n            if (this.index > 0) {\r\n                this.index--;\r\n                this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n                    index: this.index,\r\n                    fromTouch: fromTouch,\r\n                });\r\n                this.slide(this.index, !!fromTouch, false, 'prev');\r\n            }\r\n            else {\r\n                if (_loop) {\r\n                    this.index = this.galleryItems.length - 1;\r\n                    this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n                        index: this.index,\r\n                        fromTouch: fromTouch,\r\n                    });\r\n                    this.slide(this.index, !!fromTouch, false, 'prev');\r\n                }\r\n                else if (this.settings.slideEndAnimation && !fromTouch) {\r\n                    this.outer.addClass('lg-left-end');\r\n                    setTimeout(function () {\r\n                        _this.outer.removeClass('lg-left-end');\r\n                    }, 400);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    LightGallery.prototype.keyPress = function () {\r\n        var _this = this;\r\n        $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n            if (_this.lgOpened &&\r\n                _this.settings.escKey === true &&\r\n                e.keyCode === 27) {\r\n                e.preventDefault();\r\n                if (_this.settings.allowMediaOverlap &&\r\n                    _this.outer.hasClass('lg-can-toggle') &&\r\n                    _this.outer.hasClass('lg-components-open')) {\r\n                    _this.outer.removeClass('lg-components-open');\r\n                }\r\n                else {\r\n                    _this.closeGallery();\r\n                }\r\n            }\r\n            if (_this.lgOpened && _this.galleryItems.length > 1) {\r\n                if (e.keyCode === 37) {\r\n                    e.preventDefault();\r\n                    _this.goToPrevSlide();\r\n                }\r\n                if (e.keyCode === 39) {\r\n                    e.preventDefault();\r\n                    _this.goToNextSlide();\r\n                }\r\n            }\r\n        });\r\n    };\r\n    LightGallery.prototype.arrow = function () {\r\n        var _this = this;\r\n        this.getElementById('lg-prev').on('click.lg', function () {\r\n            _this.goToPrevSlide();\r\n        });\r\n        this.getElementById('lg-next').on('click.lg', function () {\r\n            _this.goToNextSlide();\r\n        });\r\n    };\r\n    LightGallery.prototype.arrowDisable = function (index) {\r\n        // Disable arrows if settings.hideControlOnEnd is true\r\n        if (!this.settings.loop && this.settings.hideControlOnEnd) {\r\n            var $prev = this.getElementById('lg-prev');\r\n            var $next = this.getElementById('lg-next');\r\n            if (index + 1 === this.galleryItems.length) {\r\n                $next.attr('disabled', 'disabled').addClass('disabled');\r\n            }\r\n            else {\r\n                $next.removeAttr('disabled').removeClass('disabled');\r\n            }\r\n            if (index === 0) {\r\n                $prev.attr('disabled', 'disabled').addClass('disabled');\r\n            }\r\n            else {\r\n                $prev.removeAttr('disabled').removeClass('disabled');\r\n            }\r\n        }\r\n    };\r\n    LightGallery.prototype.setTranslate = function ($el, xValue, yValue, scaleX, scaleY) {\r\n        if (scaleX === void 0) { scaleX = 1; }\r\n        if (scaleY === void 0) { scaleY = 1; }\r\n        $el.css('transform', 'translate3d(' +\r\n            xValue +\r\n            'px, ' +\r\n            yValue +\r\n            'px, 0px) scale3d(' +\r\n            scaleX +\r\n            ', ' +\r\n            scaleY +\r\n            ', 1)');\r\n    };\r\n    LightGallery.prototype.mousewheel = function () {\r\n        var _this = this;\r\n        var lastCall = 0;\r\n        this.outer.on('wheel.lg', function (e) {\r\n            if (!e.deltaY || _this.galleryItems.length < 2) {\r\n                return;\r\n            }\r\n            e.preventDefault();\r\n            var now = new Date().getTime();\r\n            if (now - lastCall < 1000) {\r\n                return;\r\n            }\r\n            lastCall = now;\r\n            if (e.deltaY > 0) {\r\n                _this.goToNextSlide();\r\n            }\r\n            else if (e.deltaY < 0) {\r\n                _this.goToPrevSlide();\r\n            }\r\n        });\r\n    };\r\n    LightGallery.prototype.isSlideElement = function (target) {\r\n        return (target.hasClass('lg-outer') ||\r\n            target.hasClass('lg-item') ||\r\n            target.hasClass('lg-img-wrap'));\r\n    };\r\n    LightGallery.prototype.isPosterElement = function (target) {\r\n        var playButton = this.getSlideItem(this.index)\r\n            .find('.lg-video-play-button')\r\n            .get();\r\n        return (target.hasClass('lg-video-poster') ||\r\n            target.hasClass('lg-video-play-button') ||\r\n            (playButton && playButton.contains(target.get())));\r\n    };\r\n    /**\r\n     * Maximize minimize inline gallery.\r\n     * @category lGPublicMethods\r\n     */\r\n    LightGallery.prototype.toggleMaximize = function () {\r\n        var _this = this;\r\n        this.getElementById('lg-maximize').on('click.lg', function () {\r\n            _this.$container.toggleClass('lg-inline');\r\n            _this.refreshOnResize();\r\n        });\r\n    };\r\n    LightGallery.prototype.invalidateItems = function () {\r\n        for (var index = 0; index < this.items.length; index++) {\r\n            var element = this.items[index];\r\n            var $element = $LG(element);\r\n            $element.off(\"click.lgcustom-item-\" + $element.attr('data-lg-id'));\r\n        }\r\n    };\r\n    LightGallery.prototype.trapFocus = function () {\r\n        var _this = this;\r\n        this.$container.get().focus({\r\n            preventScroll: true,\r\n        });\r\n        $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n            if (!_this.lgOpened) {\r\n                return;\r\n            }\r\n            var isTabPressed = e.key === 'Tab' || e.keyCode === 9;\r\n            if (!isTabPressed) {\r\n                return;\r\n            }\r\n            var focusableEls = utils.getFocusableElements(_this.$container.get());\r\n            var firstFocusableEl = focusableEls[0];\r\n            var lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n            if (e.shiftKey) {\r\n                if (document.activeElement === firstFocusableEl) {\r\n                    lastFocusableEl.focus();\r\n                    e.preventDefault();\r\n                }\r\n            }\r\n            else {\r\n                if (document.activeElement === lastFocusableEl) {\r\n                    firstFocusableEl.focus();\r\n                    e.preventDefault();\r\n                }\r\n            }\r\n        });\r\n    };\r\n    LightGallery.prototype.manageCloseGallery = function () {\r\n        var _this = this;\r\n        if (!this.settings.closable)\r\n            return;\r\n        var mousedown = false;\r\n        this.getElementById('lg-close').on('click.lg', function () {\r\n            _this.closeGallery();\r\n        });\r\n        if (this.settings.closeOnTap) {\r\n            // If you drag the slide and release outside gallery gets close on chrome\r\n            // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\r\n            this.outer.on('mousedown.lg', function (e) {\r\n                var target = $LG(e.target);\r\n                if (_this.isSlideElement(target)) {\r\n                    mousedown = true;\r\n                }\r\n                else {\r\n                    mousedown = false;\r\n                }\r\n            });\r\n            this.outer.on('mousemove.lg', function () {\r\n                mousedown = false;\r\n            });\r\n            this.outer.on('mouseup.lg', function (e) {\r\n                var target = $LG(e.target);\r\n                if (_this.isSlideElement(target) && mousedown) {\r\n                    if (!_this.outer.hasClass('lg-dragging')) {\r\n                        _this.closeGallery();\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * Close lightGallery if it is opened.\r\n     *\r\n     * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\r\n     * @return returns the estimated time to close gallery completely including the close animation duration\r\n     * @category lGPublicMethods\r\n     * @example\r\n     *  const plugin = lightGallery();\r\n     *  plugin.closeGallery();\r\n     *\r\n     */\r\n    LightGallery.prototype.closeGallery = function (force) {\r\n        var _this = this;\r\n        if (!this.lgOpened || (!this.settings.closable && !force)) {\r\n            return 0;\r\n        }\r\n        this.LGel.trigger(lGEvents.beforeClose);\r\n        if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\r\n            $LG(window).scrollTop(this.prevScrollTop);\r\n        }\r\n        var currentItem = this.items[this.index];\r\n        var transform;\r\n        if (this.zoomFromOrigin && currentItem) {\r\n            var _a = this.mediaContainerPosition, top_4 = _a.top, bottom = _a.bottom;\r\n            var _b = this.galleryItems[this.index], __slideVideoInfo = _b.__slideVideoInfo, poster = _b.poster;\r\n            var imageSize = utils.getSize(currentItem, this.outer, top_4 + bottom, __slideVideoInfo && poster && this.settings.videoMaxSize);\r\n            transform = utils.getTransform(currentItem, this.outer, top_4, bottom, imageSize);\r\n        }\r\n        if (this.zoomFromOrigin && transform) {\r\n            this.outer.addClass('lg-closing lg-zoom-from-image');\r\n            this.getSlideItem(this.index)\r\n                .addClass('lg-start-end-progress')\r\n                .css('transition-duration', this.settings.startAnimationDuration + 'ms')\r\n                .css('transform', transform);\r\n        }\r\n        else {\r\n            this.outer.addClass('lg-hide-items');\r\n            // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\r\n            // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\r\n            this.outer.removeClass('lg-zoom-from-image');\r\n        }\r\n        // Unbind all events added by lightGallery\r\n        // @todo\r\n        //this.$el.off('.lg.tm');\r\n        this.destroyModules();\r\n        this.lGalleryOn = false;\r\n        this.isDummyImageRemoved = false;\r\n        this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n        clearTimeout(this.hideBarTimeout);\r\n        this.hideBarTimeout = false;\r\n        $LG('html').removeClass('lg-on');\r\n        this.outer.removeClass('lg-visible lg-components-open');\r\n        // Resetting opacity to 0 isd required as  vertical swipe to close function adds inline opacity.\r\n        this.$backdrop.removeClass('in').css('opacity', 0);\r\n        var removeTimeout = this.zoomFromOrigin && transform\r\n            ? Math.max(this.settings.startAnimationDuration, this.settings.backdropDuration)\r\n            : this.settings.backdropDuration;\r\n        this.$container.removeClass('lg-show-in');\r\n        // Once the closign animation is completed and gallery is invisible\r\n        setTimeout(function () {\r\n            if (_this.zoomFromOrigin && transform) {\r\n                _this.outer.removeClass('lg-zoom-from-image');\r\n            }\r\n            _this.$container.removeClass('lg-show');\r\n            // Reset scrollbar\r\n            _this.resetScrollBar();\r\n            // Need to remove inline opacity as it is used in the stylesheet as well\r\n            _this.$backdrop\r\n                .removeAttr('style')\r\n                .css('transition-duration', _this.settings.backdropDuration + 'ms');\r\n            _this.outer.removeClass(\"lg-closing \" + _this.settings.startClass);\r\n            _this.getSlideItem(_this.index).removeClass('lg-start-end-progress');\r\n            _this.$inner.empty();\r\n            if (_this.lgOpened) {\r\n                _this.LGel.trigger(lGEvents.afterClose, {\r\n                    instance: _this,\r\n                });\r\n            }\r\n            if (_this.$container.get()) {\r\n                _this.$container.get().blur();\r\n            }\r\n            _this.lgOpened = false;\r\n        }, removeTimeout + 100);\r\n        return removeTimeout + 100;\r\n    };\r\n    LightGallery.prototype.initModules = function () {\r\n        this.plugins.forEach(function (module) {\r\n            try {\r\n                module.init();\r\n            }\r\n            catch (err) {\r\n                console.warn(\"lightGallery:- make sure lightGallery module is properly initiated\");\r\n            }\r\n        });\r\n    };\r\n    LightGallery.prototype.destroyModules = function (destroy) {\r\n        this.plugins.forEach(function (module) {\r\n            try {\r\n                if (destroy) {\r\n                    module.destroy();\r\n                }\r\n                else {\r\n                    module.closeGallery && module.closeGallery();\r\n                }\r\n            }\r\n            catch (err) {\r\n                console.warn(\"lightGallery:- make sure lightGallery module is properly destroyed\");\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Refresh lightGallery with new set of children.\r\n     *\r\n     * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\r\n     *\r\n     * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\r\n     * @see <a href=\"/demos/dynamic-mode/\">Demo</a>\r\n     * @category lGPublicMethods\r\n     * @example\r\n     *  const plugin = lightGallery();\r\n     *  // Delete or add children, then call\r\n     *  plugin.refresh();\r\n     *\r\n     */\r\n    LightGallery.prototype.refresh = function (galleryItems) {\r\n        if (!this.settings.dynamic) {\r\n            this.invalidateItems();\r\n        }\r\n        if (galleryItems) {\r\n            this.galleryItems = galleryItems;\r\n        }\r\n        else {\r\n            this.galleryItems = this.getItems();\r\n        }\r\n        this.updateControls();\r\n        this.openGalleryOnItemClick();\r\n        this.LGel.trigger(lGEvents.updateSlides);\r\n    };\r\n    LightGallery.prototype.updateControls = function () {\r\n        this.addSlideVideoInfo(this.galleryItems);\r\n        this.updateCounterTotal();\r\n        this.manageSingleSlideClassName();\r\n    };\r\n    LightGallery.prototype.destroyGallery = function () {\r\n        this.destroyModules(true);\r\n        if (!this.settings.dynamic) {\r\n            this.invalidateItems();\r\n        }\r\n        $LG(window).off(\".lg.global\" + this.lgId);\r\n        this.LGel.off('.lg');\r\n        this.$container.remove();\r\n    };\r\n    /**\r\n     * Destroy lightGallery.\r\n     * Destroy lightGallery and its plugin instances completely\r\n     *\r\n     * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\r\n     * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\r\n     * You can use refresh method most of the times.\r\n     * @category lGPublicMethods\r\n     * @example\r\n     *  const plugin = lightGallery();\r\n     *  plugin.destroy();\r\n     *\r\n     */\r\n    LightGallery.prototype.destroy = function () {\r\n        var closeTimeout = this.closeGallery(true);\r\n        if (closeTimeout) {\r\n            setTimeout(this.destroyGallery.bind(this), closeTimeout);\r\n        }\r\n        else {\r\n            this.destroyGallery();\r\n        }\r\n        return closeTimeout;\r\n    };\r\n    return LightGallery;\r\n}());\n\nfunction lightGallery(el, options) {\r\n    return new LightGallery(el, options);\r\n}\n\nexport default lightGallery;\n//# sourceMappingURL=lightgallery.es5.js.map\n","/*!\n * lightgallery | 2.7.2 | September 20th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\n\nvar zoomSettings = {\r\n    scale: 1,\r\n    zoom: true,\r\n    infiniteZoom: true,\r\n    actualSize: true,\r\n    showZoomInOutIcons: false,\r\n    actualSizeIcons: {\r\n        zoomIn: 'lg-zoom-in',\r\n        zoomOut: 'lg-zoom-out',\r\n    },\r\n    enableZoomAfter: 300,\r\n    zoomPluginStrings: {\r\n        zoomIn: 'Zoom in',\r\n        zoomOut: 'Zoom out',\r\n        viewActualSize: 'View actual size',\r\n    },\r\n};\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n    afterAppendSlide: 'lgAfterAppendSlide',\r\n    init: 'lgInit',\r\n    hasVideo: 'lgHasVideo',\r\n    containerResize: 'lgContainerResize',\r\n    updateSlides: 'lgUpdateSlides',\r\n    afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n    beforeOpen: 'lgBeforeOpen',\r\n    afterOpen: 'lgAfterOpen',\r\n    slideItemLoad: 'lgSlideItemLoad',\r\n    beforeSlide: 'lgBeforeSlide',\r\n    afterSlide: 'lgAfterSlide',\r\n    posterClick: 'lgPosterClick',\r\n    dragStart: 'lgDragStart',\r\n    dragMove: 'lgDragMove',\r\n    dragEnd: 'lgDragEnd',\r\n    beforeNextSlide: 'lgBeforeNextSlide',\r\n    beforePrevSlide: 'lgBeforePrevSlide',\r\n    beforeClose: 'lgBeforeClose',\r\n    afterClose: 'lgAfterClose',\r\n    rotateLeft: 'lgRotateLeft',\r\n    rotateRight: 'lgRotateRight',\r\n    flipHorizontal: 'lgFlipHorizontal',\r\n    flipVertical: 'lgFlipVertical',\r\n    autoplay: 'lgAutoplay',\r\n    autoplayStart: 'lgAutoplayStart',\r\n    autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar ZOOM_TRANSITION_DURATION = 500;\r\nvar Zoom = /** @class */ (function () {\r\n    function Zoom(instance, $LG) {\r\n        // get lightGallery core plugin instance\r\n        this.core = instance;\r\n        this.$LG = $LG;\r\n        this.settings = __assign(__assign({}, zoomSettings), this.core.settings);\r\n        return this;\r\n    }\r\n    // Append Zoom controls. Actual size, Zoom-in, Zoom-out\r\n    Zoom.prototype.buildTemplates = function () {\r\n        var zoomIcons = this.settings.showZoomInOutIcons\r\n            ? \"<button id=\\\"\" + this.core.getIdName('lg-zoom-in') + \"\\\" type=\\\"button\\\" aria-label=\\\"\" + this.settings.zoomPluginStrings['zoomIn'] + \"\\\" class=\\\"lg-zoom-in lg-icon\\\"></button><button id=\\\"\" + this.core.getIdName('lg-zoom-out') + \"\\\" type=\\\"button\\\" aria-label=\\\"\" + this.settings.zoomPluginStrings['zoomIn'] + \"\\\" class=\\\"lg-zoom-out lg-icon\\\"></button>\"\r\n            : '';\r\n        if (this.settings.actualSize) {\r\n            zoomIcons += \"<button id=\\\"\" + this.core.getIdName('lg-actual-size') + \"\\\" type=\\\"button\\\" aria-label=\\\"\" + this.settings.zoomPluginStrings['viewActualSize'] + \"\\\" class=\\\"\" + this.settings.actualSizeIcons.zoomIn + \" lg-icon\\\"></button>\";\r\n        }\r\n        this.core.outer.addClass('lg-use-transition-for-zoom');\r\n        this.core.$toolbar.first().append(zoomIcons);\r\n    };\r\n    /**\r\n     * @desc Enable zoom option only once the image is completely loaded\r\n     * If zoomFromOrigin is true, Zoom is enabled once the dummy image has been inserted\r\n     *\r\n     * Zoom styles are defined under lg-zoomable CSS class.\r\n     */\r\n    Zoom.prototype.enableZoom = function (event) {\r\n        var _this = this;\r\n        // delay will be 0 except first time\r\n        var _speed = this.settings.enableZoomAfter + event.detail.delay;\r\n        // set _speed value 0 if gallery opened from direct url and if it is first slide\r\n        if (this.$LG('body').first().hasClass('lg-from-hash') &&\r\n            event.detail.delay) {\r\n            // will execute only once\r\n            _speed = 0;\r\n        }\r\n        else {\r\n            // Remove lg-from-hash to enable starting animation.\r\n            this.$LG('body').first().removeClass('lg-from-hash');\r\n        }\r\n        this.zoomableTimeout = setTimeout(function () {\r\n            if (!_this.isImageSlide(_this.core.index)) {\r\n                return;\r\n            }\r\n            _this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');\r\n            if (event.detail.index === _this.core.index) {\r\n                _this.setZoomEssentials();\r\n            }\r\n        }, _speed + 30);\r\n    };\r\n    Zoom.prototype.enableZoomOnSlideItemLoad = function () {\r\n        // Add zoomable class\r\n        this.core.LGel.on(lGEvents.slideItemLoad + \".zoom\", this.enableZoom.bind(this));\r\n    };\r\n    Zoom.prototype.getDragCords = function (e) {\r\n        return {\r\n            x: e.pageX,\r\n            y: e.pageY,\r\n        };\r\n    };\r\n    Zoom.prototype.getSwipeCords = function (e) {\r\n        var x = e.touches[0].pageX;\r\n        var y = e.touches[0].pageY;\r\n        return {\r\n            x: x,\r\n            y: y,\r\n        };\r\n    };\r\n    Zoom.prototype.getDragAllowedAxises = function (scale, scaleDiff) {\r\n        var $image = this.core\r\n            .getSlideItem(this.core.index)\r\n            .find('.lg-image')\r\n            .first()\r\n            .get();\r\n        var height = 0;\r\n        var width = 0;\r\n        var rect = $image.getBoundingClientRect();\r\n        if (scale) {\r\n            height = $image.offsetHeight * scale;\r\n            width = $image.offsetWidth * scale;\r\n        }\r\n        else if (scaleDiff) {\r\n            height = rect.height + scaleDiff * rect.height;\r\n            width = rect.width + scaleDiff * rect.width;\r\n        }\r\n        else {\r\n            height = rect.height;\r\n            width = rect.width;\r\n        }\r\n        var allowY = height > this.containerRect.height;\r\n        var allowX = width > this.containerRect.width;\r\n        return {\r\n            allowX: allowX,\r\n            allowY: allowY,\r\n        };\r\n    };\r\n    Zoom.prototype.setZoomEssentials = function () {\r\n        this.containerRect = this.core.$content.get().getBoundingClientRect();\r\n    };\r\n    /**\r\n     * @desc Image zoom\r\n     * Translate the wrap and scale the image to get better user experience\r\n     *\r\n     * @param {String} scale - Zoom decrement/increment value\r\n     */\r\n    Zoom.prototype.zoomImage = function (scale, scaleDiff, reposition, resetToMax) {\r\n        if (Math.abs(scaleDiff) <= 0)\r\n            return;\r\n        var offsetX = this.containerRect.width / 2 + this.containerRect.left;\r\n        var offsetY = this.containerRect.height / 2 +\r\n            this.containerRect.top +\r\n            this.scrollTop;\r\n        var originalX;\r\n        var originalY;\r\n        if (scale === 1) {\r\n            this.positionChanged = false;\r\n        }\r\n        var dragAllowedAxises = this.getDragAllowedAxises(0, scaleDiff);\r\n        var allowY = dragAllowedAxises.allowY, allowX = dragAllowedAxises.allowX;\r\n        if (this.positionChanged) {\r\n            originalX = this.left / (this.scale - scaleDiff);\r\n            originalY = this.top / (this.scale - scaleDiff);\r\n            this.pageX = offsetX - originalX;\r\n            this.pageY = offsetY - originalY;\r\n            this.positionChanged = false;\r\n        }\r\n        var possibleSwipeCords = this.getPossibleSwipeDragCords(scaleDiff);\r\n        var x;\r\n        var y;\r\n        var _x = offsetX - this.pageX;\r\n        var _y = offsetY - this.pageY;\r\n        if (scale - scaleDiff > 1) {\r\n            var scaleVal = (scale - scaleDiff) / Math.abs(scaleDiff);\r\n            _x =\r\n                (scaleDiff < 0 ? -_x : _x) +\r\n                    this.left * (scaleVal + (scaleDiff < 0 ? -1 : 1));\r\n            _y =\r\n                (scaleDiff < 0 ? -_y : _y) +\r\n                    this.top * (scaleVal + (scaleDiff < 0 ? -1 : 1));\r\n            x = _x / scaleVal;\r\n            y = _y / scaleVal;\r\n        }\r\n        else {\r\n            var scaleVal = (scale - scaleDiff) * scaleDiff;\r\n            x = _x * scaleVal;\r\n            y = _y * scaleVal;\r\n        }\r\n        if (reposition) {\r\n            if (allowX) {\r\n                if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {\r\n                    x = possibleSwipeCords.minX;\r\n                }\r\n                else if (this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)) {\r\n                    x = possibleSwipeCords.maxX;\r\n                }\r\n            }\r\n            else {\r\n                if (scale > 1) {\r\n                    if (x < possibleSwipeCords.minX) {\r\n                        x = possibleSwipeCords.minX;\r\n                    }\r\n                    else if (x > possibleSwipeCords.maxX) {\r\n                        x = possibleSwipeCords.maxX;\r\n                    }\r\n                }\r\n            }\r\n            // @todo fix this\r\n            if (allowY) {\r\n                if (this.isBeyondPossibleTop(y, possibleSwipeCords.minY)) {\r\n                    y = possibleSwipeCords.minY;\r\n                }\r\n                else if (this.isBeyondPossibleBottom(y, possibleSwipeCords.maxY)) {\r\n                    y = possibleSwipeCords.maxY;\r\n                }\r\n            }\r\n            else {\r\n                // If the translate value based on index of beyond the viewport, utilize the available space to prevent image being cut out\r\n                if (scale > 1) {\r\n                    //If image goes beyond viewport top, use the minim possible translate value\r\n                    if (y < possibleSwipeCords.minY) {\r\n                        y = possibleSwipeCords.minY;\r\n                    }\r\n                    else if (y > possibleSwipeCords.maxY) {\r\n                        y = possibleSwipeCords.maxY;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.setZoomStyles({\r\n            x: x,\r\n            y: y,\r\n            scale: scale,\r\n        });\r\n        this.left = x;\r\n        this.top = y;\r\n        if (resetToMax) {\r\n            this.setZoomImageSize();\r\n        }\r\n    };\r\n    Zoom.prototype.resetImageTranslate = function (index) {\r\n        if (!this.isImageSlide(index)) {\r\n            return;\r\n        }\r\n        var $image = this.core.getSlideItem(index).find('.lg-image').first();\r\n        this.imageReset = false;\r\n        $image.removeClass('reset-transition reset-transition-y reset-transition-x');\r\n        this.core.outer.removeClass('lg-actual-size');\r\n        $image.css('width', 'auto').css('height', 'auto');\r\n        setTimeout(function () {\r\n            $image.removeClass('no-transition');\r\n        }, 10);\r\n    };\r\n    Zoom.prototype.setZoomImageSize = function () {\r\n        var _this = this;\r\n        var $image = this.core\r\n            .getSlideItem(this.core.index)\r\n            .find('.lg-image')\r\n            .first();\r\n        setTimeout(function () {\r\n            var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n            if (_this.scale >= actualSizeScale) {\r\n                $image.addClass('no-transition');\r\n                _this.imageReset = true;\r\n            }\r\n        }, ZOOM_TRANSITION_DURATION);\r\n        setTimeout(function () {\r\n            var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n            if (_this.scale >= actualSizeScale) {\r\n                var dragAllowedAxises = _this.getDragAllowedAxises(_this.scale);\r\n                $image\r\n                    .css('width', $image.get().naturalWidth + 'px')\r\n                    .css('height', $image.get().naturalHeight + 'px');\r\n                _this.core.outer.addClass('lg-actual-size');\r\n                if (dragAllowedAxises.allowX && dragAllowedAxises.allowY) {\r\n                    $image.addClass('reset-transition');\r\n                }\r\n                else if (dragAllowedAxises.allowX &&\r\n                    !dragAllowedAxises.allowY) {\r\n                    $image.addClass('reset-transition-x');\r\n                }\r\n                else if (!dragAllowedAxises.allowX &&\r\n                    dragAllowedAxises.allowY) {\r\n                    $image.addClass('reset-transition-y');\r\n                }\r\n            }\r\n        }, ZOOM_TRANSITION_DURATION + 50);\r\n    };\r\n    /**\r\n     * @desc apply scale3d to image and translate to image wrap\r\n     * @param {style} X,Y and scale\r\n     */\r\n    Zoom.prototype.setZoomStyles = function (style) {\r\n        var $imageWrap = this.core\r\n            .getSlideItem(this.core.index)\r\n            .find('.lg-img-wrap')\r\n            .first();\r\n        var $image = this.core\r\n            .getSlideItem(this.core.index)\r\n            .find('.lg-image')\r\n            .first();\r\n        var $dummyImage = this.core.outer\r\n            .find('.lg-current .lg-dummy-img')\r\n            .first();\r\n        this.scale = style.scale;\r\n        $image.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');\r\n        $dummyImage.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');\r\n        var transform = 'translate3d(' + style.x + 'px, ' + style.y + 'px, 0)';\r\n        $imageWrap.css('transform', transform);\r\n    };\r\n    /**\r\n     * @param index - Index of the current slide\r\n     * @param event - event will be available only if the function is called on clicking/taping the imags\r\n     */\r\n    Zoom.prototype.setActualSize = function (index, event) {\r\n        var _this = this;\r\n        if (this.zoomInProgress) {\r\n            return;\r\n        }\r\n        this.zoomInProgress = true;\r\n        var currentItem = this.core.galleryItems[this.core.index];\r\n        this.resetImageTranslate(index);\r\n        setTimeout(function () {\r\n            // Allow zoom only on image\r\n            if (!currentItem.src ||\r\n                _this.core.outer.hasClass('lg-first-slide-loading')) {\r\n                return;\r\n            }\r\n            var scale = _this.getCurrentImageActualSizeScale();\r\n            var prevScale = _this.scale;\r\n            if (_this.core.outer.hasClass('lg-zoomed')) {\r\n                _this.scale = 1;\r\n            }\r\n            else {\r\n                _this.scale = _this.getScale(scale);\r\n            }\r\n            _this.setPageCords(event);\r\n            _this.beginZoom(_this.scale);\r\n            _this.zoomImage(_this.scale, _this.scale - prevScale, true, true);\r\n        }, 50);\r\n        setTimeout(function () {\r\n            _this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n        }, 60);\r\n        setTimeout(function () {\r\n            _this.zoomInProgress = false;\r\n        }, ZOOM_TRANSITION_DURATION + 110);\r\n    };\r\n    Zoom.prototype.getNaturalWidth = function (index) {\r\n        var $image = this.core.getSlideItem(index).find('.lg-image').first();\r\n        var naturalWidth = this.core.galleryItems[index].width;\r\n        return naturalWidth\r\n            ? parseFloat(naturalWidth)\r\n            : $image.get().naturalWidth;\r\n    };\r\n    Zoom.prototype.getActualSizeScale = function (naturalWidth, width) {\r\n        var _scale;\r\n        var scale;\r\n        if (naturalWidth >= width) {\r\n            _scale = naturalWidth / width;\r\n            scale = _scale || 2;\r\n        }\r\n        else {\r\n            scale = 1;\r\n        }\r\n        return scale;\r\n    };\r\n    Zoom.prototype.getCurrentImageActualSizeScale = function () {\r\n        var $image = this.core\r\n            .getSlideItem(this.core.index)\r\n            .find('.lg-image')\r\n            .first();\r\n        var width = $image.get().offsetWidth;\r\n        var naturalWidth = this.getNaturalWidth(this.core.index) || width;\r\n        return this.getActualSizeScale(naturalWidth, width);\r\n    };\r\n    Zoom.prototype.getPageCords = function (event) {\r\n        var cords = {};\r\n        if (event) {\r\n            cords.x = event.pageX || event.touches[0].pageX;\r\n            cords.y = event.pageY || event.touches[0].pageY;\r\n        }\r\n        else {\r\n            var containerRect = this.core.$content\r\n                .get()\r\n                .getBoundingClientRect();\r\n            cords.x = containerRect.width / 2 + containerRect.left;\r\n            cords.y =\r\n                containerRect.height / 2 + this.scrollTop + containerRect.top;\r\n        }\r\n        return cords;\r\n    };\r\n    Zoom.prototype.setPageCords = function (event) {\r\n        var pageCords = this.getPageCords(event);\r\n        this.pageX = pageCords.x;\r\n        this.pageY = pageCords.y;\r\n    };\r\n    Zoom.prototype.manageActualPixelClassNames = function () {\r\n        var $actualSize = this.core.getElementById('lg-actual-size');\r\n        $actualSize\r\n            .removeClass(this.settings.actualSizeIcons.zoomIn)\r\n            .addClass(this.settings.actualSizeIcons.zoomOut);\r\n    };\r\n    // If true, zoomed - in else zoomed out\r\n    Zoom.prototype.beginZoom = function (scale) {\r\n        this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\r\n        if (scale > 1) {\r\n            this.core.outer.addClass('lg-zoomed');\r\n            this.manageActualPixelClassNames();\r\n        }\r\n        else {\r\n            this.resetZoom();\r\n        }\r\n        return scale > 1;\r\n    };\r\n    Zoom.prototype.getScale = function (scale) {\r\n        var actualSizeScale = this.getCurrentImageActualSizeScale();\r\n        if (scale < 1) {\r\n            scale = 1;\r\n        }\r\n        else if (scale > actualSizeScale) {\r\n            scale = actualSizeScale;\r\n        }\r\n        return scale;\r\n    };\r\n    Zoom.prototype.init = function () {\r\n        var _this = this;\r\n        if (!this.settings.zoom) {\r\n            return;\r\n        }\r\n        this.buildTemplates();\r\n        this.enableZoomOnSlideItemLoad();\r\n        var tapped = null;\r\n        this.core.outer.on('dblclick.lg', function (event) {\r\n            if (!_this.$LG(event.target).hasClass('lg-image')) {\r\n                return;\r\n            }\r\n            _this.setActualSize(_this.core.index, event);\r\n        });\r\n        this.core.outer.on('touchstart.lg', function (event) {\r\n            var $target = _this.$LG(event.target);\r\n            if (event.touches.length === 1 && $target.hasClass('lg-image')) {\r\n                if (!tapped) {\r\n                    tapped = setTimeout(function () {\r\n                        tapped = null;\r\n                    }, 300);\r\n                }\r\n                else {\r\n                    clearTimeout(tapped);\r\n                    tapped = null;\r\n                    event.preventDefault();\r\n                    _this.setActualSize(_this.core.index, event);\r\n                }\r\n            }\r\n        });\r\n        this.core.LGel.on(lGEvents.containerResize + \".zoom \" + lGEvents.rotateRight + \".zoom \" + lGEvents.rotateLeft + \".zoom \" + lGEvents.flipHorizontal + \".zoom \" + lGEvents.flipVertical + \".zoom\", function () {\r\n            if (!_this.core.lgOpened ||\r\n                !_this.isImageSlide(_this.core.index) ||\r\n                _this.core.touchAction) {\r\n                return;\r\n            }\r\n            var _LGel = _this.core\r\n                .getSlideItem(_this.core.index)\r\n                .find('.lg-img-wrap')\r\n                .first();\r\n            _this.top = 0;\r\n            _this.left = 0;\r\n            _this.setZoomEssentials();\r\n            _this.setZoomSwipeStyles(_LGel, { x: 0, y: 0 });\r\n            _this.positionChanged = true;\r\n        });\r\n        // Update zoom on resize and orientationchange\r\n        this.$LG(window).on(\"scroll.lg.zoom.global\" + this.core.lgId, function () {\r\n            if (!_this.core.lgOpened)\r\n                return;\r\n            _this.scrollTop = _this.$LG(window).scrollTop();\r\n        });\r\n        this.core.getElementById('lg-zoom-out').on('click.lg', function () {\r\n            // Allow zoom only on image\r\n            if (!_this.isImageSlide(_this.core.index)) {\r\n                return;\r\n            }\r\n            var timeout = 0;\r\n            if (_this.imageReset) {\r\n                _this.resetImageTranslate(_this.core.index);\r\n                timeout = 50;\r\n            }\r\n            setTimeout(function () {\r\n                var scale = _this.scale - _this.settings.scale;\r\n                if (scale < 1) {\r\n                    scale = 1;\r\n                }\r\n                _this.beginZoom(scale);\r\n                _this.zoomImage(scale, -_this.settings.scale, true, !_this.settings.infiniteZoom);\r\n            }, timeout);\r\n        });\r\n        this.core.getElementById('lg-zoom-in').on('click.lg', function () {\r\n            _this.zoomIn();\r\n        });\r\n        this.core.getElementById('lg-actual-size').on('click.lg', function () {\r\n            _this.setActualSize(_this.core.index);\r\n        });\r\n        this.core.LGel.on(lGEvents.beforeOpen + \".zoom\", function () {\r\n            _this.core.outer.find('.lg-item').removeClass('lg-zoomable');\r\n        });\r\n        this.core.LGel.on(lGEvents.afterOpen + \".zoom\", function () {\r\n            _this.scrollTop = _this.$LG(window).scrollTop();\r\n            // Set the initial value center\r\n            _this.pageX = _this.core.outer.width() / 2;\r\n            _this.pageY = _this.core.outer.height() / 2 + _this.scrollTop;\r\n            _this.scale = 1;\r\n        });\r\n        // Reset zoom on slide change\r\n        this.core.LGel.on(lGEvents.afterSlide + \".zoom\", function (event) {\r\n            var prevIndex = event.detail.prevIndex;\r\n            _this.scale = 1;\r\n            _this.positionChanged = false;\r\n            _this.zoomInProgress = false;\r\n            _this.resetZoom(prevIndex);\r\n            _this.resetImageTranslate(prevIndex);\r\n            if (_this.isImageSlide(_this.core.index)) {\r\n                _this.setZoomEssentials();\r\n            }\r\n        });\r\n        // Drag option after zoom\r\n        this.zoomDrag();\r\n        this.pinchZoom();\r\n        this.zoomSwipe();\r\n        // Store the zoomable timeout value just to clear it while closing\r\n        this.zoomableTimeout = false;\r\n        this.positionChanged = false;\r\n        this.zoomInProgress = false;\r\n    };\r\n    Zoom.prototype.zoomIn = function () {\r\n        // Allow zoom only on image\r\n        if (!this.isImageSlide(this.core.index)) {\r\n            return;\r\n        }\r\n        var scale = this.scale + this.settings.scale;\r\n        if (!this.settings.infiniteZoom) {\r\n            scale = this.getScale(scale);\r\n        }\r\n        this.beginZoom(scale);\r\n        this.zoomImage(scale, Math.min(this.settings.scale, scale - this.scale), true, !this.settings.infiniteZoom);\r\n    };\r\n    // Reset zoom effect\r\n    Zoom.prototype.resetZoom = function (index) {\r\n        this.core.outer.removeClass('lg-zoomed lg-zoom-drag-transition');\r\n        var $actualSize = this.core.getElementById('lg-actual-size');\r\n        var $item = this.core.getSlideItem(index !== undefined ? index : this.core.index);\r\n        $actualSize\r\n            .removeClass(this.settings.actualSizeIcons.zoomOut)\r\n            .addClass(this.settings.actualSizeIcons.zoomIn);\r\n        $item.find('.lg-img-wrap').first().removeAttr('style');\r\n        $item.find('.lg-image').first().removeAttr('style');\r\n        this.scale = 1;\r\n        this.left = 0;\r\n        this.top = 0;\r\n        // Reset pagx pagy values to center\r\n        this.setPageCords();\r\n    };\r\n    Zoom.prototype.getTouchDistance = function (e) {\r\n        return Math.sqrt((e.touches[0].pageX - e.touches[1].pageX) *\r\n            (e.touches[0].pageX - e.touches[1].pageX) +\r\n            (e.touches[0].pageY - e.touches[1].pageY) *\r\n                (e.touches[0].pageY - e.touches[1].pageY));\r\n    };\r\n    Zoom.prototype.pinchZoom = function () {\r\n        var _this = this;\r\n        var startDist = 0;\r\n        var pinchStarted = false;\r\n        var initScale = 1;\r\n        var prevScale = 0;\r\n        var $item = this.core.getSlideItem(this.core.index);\r\n        this.core.outer.on('touchstart.lg', function (e) {\r\n            $item = _this.core.getSlideItem(_this.core.index);\r\n            if (!_this.isImageSlide(_this.core.index)) {\r\n                return;\r\n            }\r\n            if (e.touches.length === 2) {\r\n                e.preventDefault();\r\n                if (_this.core.outer.hasClass('lg-first-slide-loading')) {\r\n                    return;\r\n                }\r\n                initScale = _this.scale || 1;\r\n                _this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\r\n                _this.setPageCords(e);\r\n                _this.resetImageTranslate(_this.core.index);\r\n                _this.core.touchAction = 'pinch';\r\n                startDist = _this.getTouchDistance(e);\r\n            }\r\n        });\r\n        this.core.$inner.on('touchmove.lg', function (e) {\r\n            if (e.touches.length === 2 &&\r\n                _this.core.touchAction === 'pinch' &&\r\n                (_this.$LG(e.target).hasClass('lg-item') ||\r\n                    $item.get().contains(e.target))) {\r\n                e.preventDefault();\r\n                var endDist = _this.getTouchDistance(e);\r\n                var distance = startDist - endDist;\r\n                if (!pinchStarted && Math.abs(distance) > 5) {\r\n                    pinchStarted = true;\r\n                }\r\n                if (pinchStarted) {\r\n                    prevScale = _this.scale;\r\n                    var _scale = Math.max(1, initScale + -distance * 0.02);\r\n                    _this.scale =\r\n                        Math.round((_scale + Number.EPSILON) * 100) / 100;\r\n                    var diff = _this.scale - prevScale;\r\n                    _this.zoomImage(_this.scale, Math.round((diff + Number.EPSILON) * 100) / 100, false, false);\r\n                }\r\n            }\r\n        });\r\n        this.core.$inner.on('touchend.lg', function (e) {\r\n            if (_this.core.touchAction === 'pinch' &&\r\n                (_this.$LG(e.target).hasClass('lg-item') ||\r\n                    $item.get().contains(e.target))) {\r\n                pinchStarted = false;\r\n                startDist = 0;\r\n                if (_this.scale <= 1) {\r\n                    _this.resetZoom();\r\n                }\r\n                else {\r\n                    var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n                    if (_this.scale >= actualSizeScale) {\r\n                        var scaleDiff = actualSizeScale - _this.scale;\r\n                        if (scaleDiff === 0) {\r\n                            scaleDiff = 0.01;\r\n                        }\r\n                        _this.zoomImage(actualSizeScale, scaleDiff, false, true);\r\n                    }\r\n                    _this.manageActualPixelClassNames();\r\n                    _this.core.outer.addClass('lg-zoomed');\r\n                }\r\n                _this.core.touchAction = undefined;\r\n            }\r\n        });\r\n    };\r\n    Zoom.prototype.touchendZoom = function (startCoords, endCoords, allowX, allowY, touchDuration) {\r\n        var distanceXnew = endCoords.x - startCoords.x;\r\n        var distanceYnew = endCoords.y - startCoords.y;\r\n        var speedX = Math.abs(distanceXnew) / touchDuration + 1;\r\n        var speedY = Math.abs(distanceYnew) / touchDuration + 1;\r\n        if (speedX > 2) {\r\n            speedX += 1;\r\n        }\r\n        if (speedY > 2) {\r\n            speedY += 1;\r\n        }\r\n        distanceXnew = distanceXnew * speedX;\r\n        distanceYnew = distanceYnew * speedY;\r\n        var _LGel = this.core\r\n            .getSlideItem(this.core.index)\r\n            .find('.lg-img-wrap')\r\n            .first();\r\n        var distance = {};\r\n        distance.x = this.left + distanceXnew;\r\n        distance.y = this.top + distanceYnew;\r\n        var possibleSwipeCords = this.getPossibleSwipeDragCords();\r\n        if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {\r\n            if (allowY) {\r\n                if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\r\n                    distance.y = possibleSwipeCords.minY;\r\n                }\r\n                else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {\r\n                    distance.y = possibleSwipeCords.maxY;\r\n                }\r\n            }\r\n            if (allowX) {\r\n                if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {\r\n                    distance.x = possibleSwipeCords.minX;\r\n                }\r\n                else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {\r\n                    distance.x = possibleSwipeCords.maxX;\r\n                }\r\n            }\r\n            if (allowY) {\r\n                this.top = distance.y;\r\n            }\r\n            else {\r\n                distance.y = this.top;\r\n            }\r\n            if (allowX) {\r\n                this.left = distance.x;\r\n            }\r\n            else {\r\n                distance.x = this.left;\r\n            }\r\n            this.setZoomSwipeStyles(_LGel, distance);\r\n            this.positionChanged = true;\r\n        }\r\n    };\r\n    Zoom.prototype.getZoomSwipeCords = function (startCoords, endCoords, allowX, allowY, possibleSwipeCords) {\r\n        var distance = {};\r\n        if (allowY) {\r\n            distance.y = this.top + (endCoords.y - startCoords.y);\r\n            if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\r\n                var diffMinY = possibleSwipeCords.minY - distance.y;\r\n                distance.y = possibleSwipeCords.minY - diffMinY / 6;\r\n            }\r\n            else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {\r\n                var diffMaxY = distance.y - possibleSwipeCords.maxY;\r\n                distance.y = possibleSwipeCords.maxY + diffMaxY / 6;\r\n            }\r\n        }\r\n        else {\r\n            distance.y = this.top;\r\n        }\r\n        if (allowX) {\r\n            distance.x = this.left + (endCoords.x - startCoords.x);\r\n            if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {\r\n                var diffMinX = possibleSwipeCords.minX - distance.x;\r\n                distance.x = possibleSwipeCords.minX - diffMinX / 6;\r\n            }\r\n            else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {\r\n                var difMaxX = distance.x - possibleSwipeCords.maxX;\r\n                distance.x = possibleSwipeCords.maxX + difMaxX / 6;\r\n            }\r\n        }\r\n        else {\r\n            distance.x = this.left;\r\n        }\r\n        return distance;\r\n    };\r\n    Zoom.prototype.isBeyondPossibleLeft = function (x, minX) {\r\n        return x >= minX;\r\n    };\r\n    Zoom.prototype.isBeyondPossibleRight = function (x, maxX) {\r\n        return x <= maxX;\r\n    };\r\n    Zoom.prototype.isBeyondPossibleTop = function (y, minY) {\r\n        return y >= minY;\r\n    };\r\n    Zoom.prototype.isBeyondPossibleBottom = function (y, maxY) {\r\n        return y <= maxY;\r\n    };\r\n    Zoom.prototype.isImageSlide = function (index) {\r\n        var currentItem = this.core.galleryItems[index];\r\n        return this.core.getSlideType(currentItem) === 'image';\r\n    };\r\n    Zoom.prototype.getPossibleSwipeDragCords = function (scale) {\r\n        var $image = this.core\r\n            .getSlideItem(this.core.index)\r\n            .find('.lg-image')\r\n            .first();\r\n        var bottom = this.core.mediaContainerPosition.bottom;\r\n        var imgRect = $image.get().getBoundingClientRect();\r\n        var imageHeight = imgRect.height;\r\n        var imageWidth = imgRect.width;\r\n        if (scale) {\r\n            imageHeight = imageHeight + scale * imageHeight;\r\n            imageWidth = imageWidth + scale * imageWidth;\r\n        }\r\n        var minY = (imageHeight - this.containerRect.height) / 2;\r\n        var maxY = (this.containerRect.height - imageHeight) / 2 + bottom;\r\n        var minX = (imageWidth - this.containerRect.width) / 2;\r\n        var maxX = (this.containerRect.width - imageWidth) / 2;\r\n        var possibleSwipeCords = {\r\n            minY: minY,\r\n            maxY: maxY,\r\n            minX: minX,\r\n            maxX: maxX,\r\n        };\r\n        return possibleSwipeCords;\r\n    };\r\n    Zoom.prototype.setZoomSwipeStyles = function (LGel, distance) {\r\n        LGel.css('transform', 'translate3d(' + distance.x + 'px, ' + distance.y + 'px, 0)');\r\n    };\r\n    Zoom.prototype.zoomSwipe = function () {\r\n        var _this = this;\r\n        var startCoords = {};\r\n        var endCoords = {};\r\n        var isMoved = false;\r\n        // Allow x direction drag\r\n        var allowX = false;\r\n        // Allow Y direction drag\r\n        var allowY = false;\r\n        var startTime = new Date();\r\n        var endTime = new Date();\r\n        var possibleSwipeCords;\r\n        var _LGel;\r\n        var $item = this.core.getSlideItem(this.core.index);\r\n        this.core.$inner.on('touchstart.lg', function (e) {\r\n            // Allow zoom only on image\r\n            if (!_this.isImageSlide(_this.core.index)) {\r\n                return;\r\n            }\r\n            $item = _this.core.getSlideItem(_this.core.index);\r\n            if ((_this.$LG(e.target).hasClass('lg-item') ||\r\n                $item.get().contains(e.target)) &&\r\n                e.touches.length === 1 &&\r\n                _this.core.outer.hasClass('lg-zoomed')) {\r\n                e.preventDefault();\r\n                startTime = new Date();\r\n                _this.core.touchAction = 'zoomSwipe';\r\n                _LGel = _this.core\r\n                    .getSlideItem(_this.core.index)\r\n                    .find('.lg-img-wrap')\r\n                    .first();\r\n                var dragAllowedAxises = _this.getDragAllowedAxises(0);\r\n                allowY = dragAllowedAxises.allowY;\r\n                allowX = dragAllowedAxises.allowX;\r\n                if (allowX || allowY) {\r\n                    startCoords = _this.getSwipeCords(e);\r\n                }\r\n                possibleSwipeCords = _this.getPossibleSwipeDragCords();\r\n                // reset opacity and transition duration\r\n                _this.core.outer.addClass('lg-zoom-dragging lg-zoom-drag-transition');\r\n            }\r\n        });\r\n        this.core.$inner.on('touchmove.lg', function (e) {\r\n            if (e.touches.length === 1 &&\r\n                _this.core.touchAction === 'zoomSwipe' &&\r\n                (_this.$LG(e.target).hasClass('lg-item') ||\r\n                    $item.get().contains(e.target))) {\r\n                e.preventDefault();\r\n                _this.core.touchAction = 'zoomSwipe';\r\n                endCoords = _this.getSwipeCords(e);\r\n                var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);\r\n                if (Math.abs(endCoords.x - startCoords.x) > 15 ||\r\n                    Math.abs(endCoords.y - startCoords.y) > 15) {\r\n                    isMoved = true;\r\n                    _this.setZoomSwipeStyles(_LGel, distance);\r\n                }\r\n            }\r\n        });\r\n        this.core.$inner.on('touchend.lg', function (e) {\r\n            if (_this.core.touchAction === 'zoomSwipe' &&\r\n                (_this.$LG(e.target).hasClass('lg-item') ||\r\n                    $item.get().contains(e.target))) {\r\n                e.preventDefault();\r\n                _this.core.touchAction = undefined;\r\n                _this.core.outer.removeClass('lg-zoom-dragging');\r\n                if (!isMoved) {\r\n                    return;\r\n                }\r\n                isMoved = false;\r\n                endTime = new Date();\r\n                var touchDuration = endTime.valueOf() - startTime.valueOf();\r\n                _this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);\r\n            }\r\n        });\r\n    };\r\n    Zoom.prototype.zoomDrag = function () {\r\n        var _this = this;\r\n        var startCoords = {};\r\n        var endCoords = {};\r\n        var isDragging = false;\r\n        var isMoved = false;\r\n        // Allow x direction drag\r\n        var allowX = false;\r\n        // Allow Y direction drag\r\n        var allowY = false;\r\n        var startTime;\r\n        var endTime;\r\n        var possibleSwipeCords;\r\n        var _LGel;\r\n        this.core.outer.on('mousedown.lg.zoom', function (e) {\r\n            // Allow zoom only on image\r\n            if (!_this.isImageSlide(_this.core.index)) {\r\n                return;\r\n            }\r\n            var $item = _this.core.getSlideItem(_this.core.index);\r\n            if (_this.$LG(e.target).hasClass('lg-item') ||\r\n                $item.get().contains(e.target)) {\r\n                startTime = new Date();\r\n                _LGel = _this.core\r\n                    .getSlideItem(_this.core.index)\r\n                    .find('.lg-img-wrap')\r\n                    .first();\r\n                var dragAllowedAxises = _this.getDragAllowedAxises(0);\r\n                allowY = dragAllowedAxises.allowY;\r\n                allowX = dragAllowedAxises.allowX;\r\n                if (_this.core.outer.hasClass('lg-zoomed')) {\r\n                    if (_this.$LG(e.target).hasClass('lg-object') &&\r\n                        (allowX || allowY)) {\r\n                        e.preventDefault();\r\n                        startCoords = _this.getDragCords(e);\r\n                        possibleSwipeCords = _this.getPossibleSwipeDragCords();\r\n                        isDragging = true;\r\n                        _this.core.outer\r\n                            .removeClass('lg-grab')\r\n                            .addClass('lg-grabbing lg-zoom-drag-transition lg-zoom-dragging');\r\n                        // reset opacity and transition duration\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        this.$LG(window).on(\"mousemove.lg.zoom.global\" + this.core.lgId, function (e) {\r\n            if (isDragging) {\r\n                isMoved = true;\r\n                endCoords = _this.getDragCords(e);\r\n                var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);\r\n                _this.setZoomSwipeStyles(_LGel, distance);\r\n            }\r\n        });\r\n        this.$LG(window).on(\"mouseup.lg.zoom.global\" + this.core.lgId, function (e) {\r\n            if (isDragging) {\r\n                endTime = new Date();\r\n                isDragging = false;\r\n                _this.core.outer.removeClass('lg-zoom-dragging');\r\n                // Fix for chrome mouse move on click\r\n                if (isMoved &&\r\n                    (startCoords.x !== endCoords.x ||\r\n                        startCoords.y !== endCoords.y)) {\r\n                    endCoords = _this.getDragCords(e);\r\n                    var touchDuration = endTime.valueOf() - startTime.valueOf();\r\n                    _this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);\r\n                }\r\n                isMoved = false;\r\n            }\r\n            _this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n        });\r\n    };\r\n    Zoom.prototype.closeGallery = function () {\r\n        this.resetZoom();\r\n        this.zoomInProgress = false;\r\n    };\r\n    Zoom.prototype.destroy = function () {\r\n        // Unbind all events added by lightGallery zoom plugin\r\n        this.$LG(window).off(\".lg.zoom.global\" + this.core.lgId);\r\n        this.core.LGel.off('.lg.zoom');\r\n        this.core.LGel.off('.zoom');\r\n        clearTimeout(this.zoomableTimeout);\r\n        this.zoomableTimeout = false;\r\n    };\r\n    return Zoom;\r\n}());\n\nexport default Zoom;\n//# sourceMappingURL=lg-zoom.es5.js.map\n","import { SwatchBasket } from './SwatchBasket';\nimport { swatchSelectedEvent, initSwatchPanel } from '../swatch';\nimport { handleLocalStorage } from './local-storage';\nimport { loadOverlay } from '../features/overlays';\nimport { SwatchForm } from './SwatchForm';\n\n/**\n * Class representing the nab a swatch overlay\n */\nexport class NabASwatch {\n  constructor(colour, sku) {\n    this.colour = colour;\n    this.sku = sku;\n    this.overlayUrl = `/swatches/nab-a-swatch?stockitem=${this.sku}&colour=${this.colour}`;\n\n    this.loadNabASwatchOverlay(this.overlayUrl);\n  }\n\n  loadNabASwatchOverlay = url => {\n    loadOverlay(url, {\n      modifiers: ['takeover', 'nab-a-swatch'],\n      callback: () => {\n        this.#renderSwatchBasket();\n        this.#initSwatchPanel();\n      },\n    });\n  };\n\n  get overlayCallback() {\n    return () => this.loadNabASwatchOverlay(this.overlayUrl);\n  }\n\n  /**\n   * Initialize swatch panel and attach event listeners for swatch selection.\n   * @private\n   */\n  #initSwatchPanel = () => {\n    const container = Overlay.target.querySelector('[data-swatch-container]');\n\n    if (!container) {\n      return;\n    }\n\n    initSwatchPanel(container);\n\n    container.addEventListener(swatchSelectedEvent, event => {\n      handleLocalStorage(\n        event.detail,\n        'loaf-render-swatch-basket',\n        this.overlayCallback,\n        false\n      );\n    });\n  };\n\n  /**\n   * Renders the swatch basket\n   * @private\n   */\n  #renderSwatchBasket = () => {\n    const swatchBasket = new SwatchBasket(\n      Overlay.target.querySelector('[data-swatch-basket]')\n    );\n\n    swatchBasket.renderSwatchBasket();\n\n    // Listen for custom event to render the swatch basket.\n    document.addEventListener('loaf-render-swatch-basket', () => {\n      swatchBasket.renderSwatchBasket();\n    });\n  };\n}\n","import { handleFragmentInit } from './fragments';\nimport { initialiseSwiper } from '../swiper/swiper';\nimport { replaceElementHTML } from './replace';\nimport lightGallery from 'lightgallery';\nimport lgZoom from 'lightgallery/plugins/zoom';\nimport { initGalleryCylindoViewer } from './gallery/cylindo';\nimport VideoPlayer from '../../../vendor/d3r/cloudinary/resources/javascript/src/video-player';\nimport {\n  addToLocalStorage,\n  handleLocalStorage,\n  MAX_BASKET_SWATCHES,\n} from '../swatch/local-storage';\nimport { NabASwatch } from '../swatch/NabASwatch';\n\nexport const initGallery = () => {\n  handleFragmentInit(({ replace }) => {\n    if (replace?.gallery) {\n      replaceElementHTML('.product-gallery', replace.gallery);\n    }\n    initGalleryCylindoViewer();\n    initGallerySliders();\n    initGallerySwatchButtons();\n    initGalleryVideo();\n    initLightGallery();\n    initLightGalleryBump();\n  });\n\n  document.addEventListener('loaf-render-swatch-form', () => {\n    new SwatchForm();\n  });\n};\n\nconst initGallerySliders = () => {\n  const thumbs = document.querySelector('[data-carousel-type=\"productThumbs\"]');\n  const thumbSwiper = initialiseSwiper(thumbs);\n\n  const gallery = document.querySelector(\n    '[data-carousel-type=\"productGallery\"]'\n  );\n\n  const customOptions = {\n    thumbs: {\n      swiper: thumbSwiper,\n    },\n  };\n\n  initialiseSwiper(gallery, customOptions);\n};\n\nconst initGallerySwatchButtons = () => {\n  const addToSwatchesButtons = document.querySelectorAll(\n    '[data-add-swatch-slide]'\n  );\n\n  for (const addToSwatchesButton of addToSwatchesButtons ?? []) {\n    // Add event listener for adding swatches\n    addToSwatchesButton.addEventListener('click', event => {\n      event.stopPropagation();\n\n      const btn = event.target.closest('button');\n      const swatchObject = {\n        value: btn.dataset.optionValues,\n        title: btn.dataset.title,\n        longTitle: btn.dataset.longTitle,\n        url: btn.dataset.overlayUrl,\n        hex: btn.dataset.hex,\n        categoryClass: btn.dataset.categoryClass,\n        backgroundCSS: btn.dataset.swatchBackground,\n      };\n\n      const swatches = JSON.parse(localStorage.getItem('swatches')) ?? [];\n      const overlayCallback = () =>\n        new NabASwatch(btn.dataset.colour, btn.dataset.stockitem, swatchObject);\n\n      // If the swatch exists, just open the nab a swatch overlay\n      // and ignore any local storage logic.\n      document.addEventListener('loaf-swatch-exists', () => {\n        new NabASwatch(btn.dataset.colour, btn.dataset.stockitem);\n      });\n\n      if (swatches.length === MAX_BASKET_SWATCHES) {\n        handleLocalStorage(\n          swatchObject,\n          'loaf-swatch-exists',\n          overlayCallback,\n          true\n        );\n      } else {\n        addToLocalStorage(swatches, swatchObject);\n        new NabASwatch(btn.dataset.colour, btn.dataset.stockitem);\n      }\n    });\n  }\n};\n\nconst initGalleryVideo = () => {\n  const gallery = document.querySelector(\n    '[data-carousel-type=\"productGallery\"]'\n  );\n  gallery.querySelectorAll('.cld-video-player').forEach(elm => new VideoPlayer(elm));\n};\n\nconst initLightGallery = () => {\n  lightGallery(document.querySelector('[data-lightgallery]'), {\n    plugins: [lgZoom],\n    speed: 250,\n    selector: '.lightgallery',\n  });\n};\n\nconst initLightGalleryBump = () => {\n  const showBumpButton =  document.querySelector('[data-lightgallery-bump-button]');\n\n  if(!showBumpButton){\n    return;\n  }\n\n  const bumpGallery = lightGallery(document.querySelector('[data-lightgallery-bump]'), {\n    plugins: [lgZoom],\n    speed: 250,\n    selector: '.lightgallerybump',\n  });\n\n  showBumpButton.addEventListener('click', (e) => {\n    bumpGallery.openGallery();\n  });\n};\n\n","import { DimensionsV2 } from '../product/dimensions';\nimport { optionKindSize } from './chooser/constants';\nimport { initOverlayButtons } from '../features/overlays';\nimport { pdpDataEvent } from './page';\nimport { getCookieValue } from '../util/cookie';\n\nexport const initDimensions = () => {\n  // Initialise the dimensions v2 block if it's present on the page.\n  const dimensionsblock = document.querySelector('#dimensions');\n\n  if (\n    dimensionsblock &&\n    dimensionsblock.querySelector('.product-dimensions') &&\n    dimensionsblock.querySelector('.product-dimensions__table tbody').rows.length > 0\n  ) {\n    const dimsV2 = new DimensionsV2(dimensionsblock);\n\n    // When the product size is changed, update the highlighted size column in the\n    // dimensions table.\n    document.body.addEventListener(pdpDataEvent, (e) => {\n      const { options } = e.detail;\n\n      for (const option in options) {\n        if (options[option].kind === optionKindSize) {\n          dimsV2.setSelectedSize(options[option].value);\n          break;\n        }\n      }\n    });\n\n    // Highlight the size column for the initially selected size.\n    const initialSize = document.querySelector('.js-hidden_size')?.value;\n    if (initialSize) {\n      dimsV2.setSelectedSize(initialSize);\n    }\n  }\n\n  if (getCookieValue('kiosk') && dimensionsblock) {\n    const dimensionsButton = dimensionsblock.querySelector('.product_dimensions-print-button');\n\n    dimensionsButton.setAttribute('target', '_self');\n  }\n\n  initOverlayButtons();\n};\n","/**\n * Get the value of a cookie by name.\n *\n * @param {string} name\n * @returns {string | undefined}\n */\nexport const getCookieValue = (name) => {\n  const cookies = document.cookie.split(';').map((kv) => kv.trimStart());\n  return cookies.find((cookie) => cookie.startsWith(`${name}=`))?.substring(name.length + 1);\n};\n","import { initGallery } from './gallery';\nimport { initGalleryCylindoViewer } from './gallery/cylindo';\n\n/**\n * iOS fix for cylindo in the slider where cylindo viewer doesn't go full screen\n *\n *  - On fullscreen click, hide all other slides and show only cylindo slide.\n *  - On fullscreen exit, show all other slides and reset cylindo slide, the reinvoke gallery init.\n *  - Also, cylindo slide is moved to the first position in the gallery.\n */\nconst iosCylindoSlideFix = () => {\n\n    const oldState = {};\n\n    function isiOS() {\n        const platforms = ['iPad', 'iPhone', 'iPod', 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator'];\n        return platforms.includes(navigator.platform) || (navigator.userAgent.includes('Mac') && 'ontouchend' in document);\n    }\n\n    function hideOtherSlides() {\n        const gallerySlides = document.querySelectorAll('figure.product-gallery__item:not(.js-slide-cylindo)');\n\n        gallerySlides.forEach(slide => {\n            slide.style.display = 'none';\n        });\n    }\n\n    function showOtherSlides() {\n        const gallerySlides = document.querySelectorAll('figure.product-gallery__item:not(.js-slide-cylindo)');\n\n        gallerySlides.forEach(slide => {\n            slide.style.display = 'unset';\n        });\n    }\n\n    function moveCylindoSlide() {\n        const cylindoSlide = document.querySelector('figure.product-gallery__item.js-slide-cylindo');\n\n        oldState.transform = cylindoSlide.style.transform;\n        oldState.width = cylindoSlide.style.width;\n        oldState.pointerEvents = cylindoSlide.style.pointerEvents;\n\n        cylindoSlide.style.transform = 'translate3d(0px, 0px, 0px)';\n        cylindoSlide.style.width = '100vw';\n        cylindoSlide.style.pointerEvents = 'auto';\n    }\n\n    function resetCylindoSlide() {\n        const cylindoSlide = document.querySelector('figure.product-gallery__item.js-slide-cylindo');\n\n        cylindoSlide.style.transform = oldState.transform;\n        cylindoSlide.style.width = oldState.width;\n        cylindoSlide.style.pointerEvents = oldState.pointerEvents;\n    }\n\n    const viewer = document.querySelector('cylindo-viewer');\n\n    if (viewer && isiOS()) {\n        viewer.addEventListener('fullscreen-change', () => {\n            const galleryWrap = viewer.closest('.product-gallery');\n            if (galleryWrap) {\n                if (galleryWrap.dataset.open) {\n                    showOtherSlides();\n                    resetCylindoSlide();\n                    delete galleryWrap.dataset.open;\n                    galleryWrap.style.display = 'grid';\n                    setTimeout(() => {\n                        initGallery();\n                        initGalleryCylindoViewer();\n                    }, 0);\n                } else {\n                    hideOtherSlides();\n                    moveCylindoSlide();\n                    galleryWrap.dataset.open = true;\n                    galleryWrap.style.display = 'block';\n                }\n            }\n        });\n    }\n};\n\nexport const initCylindo = () => {\n    iosCylindoSlideFix();\n}\n","// @ts-check\n\nimport { getDixaContainer, getDixaToggleWrapper, setDixaOffset } from '../features/dixa';\nimport { handleFragmentInit } from './fragments';\nimport { replaceElementHTML } from './replace';\n\nconst mobileObservedSelector = '.product-details';\nconst nonMobileObservedSelector = '.product-details__action > button';\n\n/**\n * Initialise the quick add bar on the PDP.\n *\n * The quick add / add to basket buttons are initialised separately.\n */\nexport const initQuickAddBar = () => {\n  let headerHeight = 0;\n\n  const header = document.querySelector('.header');\n  if (header instanceof HTMLElement) {\n    headerHeight += header.offsetHeight;\n  }\n\n  const noticeBar = document.querySelector('.notice-bar');\n  if (noticeBar instanceof HTMLElement) {\n    headerHeight += noticeBar.offsetHeight;\n  }\n\n  const observer = new IntersectionObserver(showBar, {\n    rootMargin: `-${headerHeight}px 0px 0px 0px`,\n  });\n  const observerAttentive = new MutationObserver(hideAttentivePopup);\n\n  handleFragmentInit(({ replace }) => {\n    observer.disconnect();\n\n    if (replace?.addToBasketQuick) {\n      replaceElementHTML('.product-quick-add-bar', replace.addToBasketQuick);\n    }\n\n    const quickAddBar = document.querySelector('.product-quick-add-bar');\n    if (!(quickAddBar instanceof HTMLElement)) {\n      return;\n    }\n\n    /**\n     * This is a little hacky, but done to offset the footer for the bar to fit under\n     * scrollHeight is needed to get content height due to the fact max-height = 0 for the css transtion\n     * offSetHeight is the padding etc\n     */\n    const outerWrap = document.querySelector('#outer-wrapper');\n    if (outerWrap instanceof HTMLElement) {\n      outerWrap.style.paddingBottom = `${quickAddBar.scrollHeight + quickAddBar.offsetHeight}px`;\n    }\n\n\n    for (const selector of [mobileObservedSelector, nonMobileObservedSelector]) {\n      const el = document.querySelector(selector);\n      if (el) {\n        observer.observe(el);\n      }\n    }\n  });\n\n  observerAttentive.observe(document.body, { subtree: false, childList: true })\n}\n\nconst showBar = (entries) => {\n  const bar = document.querySelector('.product-quick-add-bar');\n\n  for (const entry of entries) {\n    const mobile = isMobile() || window.innerHeight < 800;\n\n    if (\n      !(mobile && entry.target.matches(mobileObservedSelector)) &&\n      !(!mobile && entry.target.matches(nonMobileObservedSelector))\n    ) {\n      continue;\n    }\n\n    let showed = false;\n    if (bar instanceof HTMLElement) {\n      showed = bar.classList.toggle('product-quick-add-bar--show', !entry.isIntersecting);\n    }\n\n    updateDixaOffset(showed, bar);\n  };\n}\n\nconst isMobile = () => {\n  return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n};\n\nconst updateDixaOffset = (barShowing, barEl) => {\n  let offset = 0;\n  if (barShowing && barEl instanceof HTMLElement) {\n    offset += barEl.offsetHeight + barEl.scrollHeight;\n  }\n\n  setDixaOffset(offset);\n  getDixaContainer()?.classList?.add('dixa--quick-add');\n  getDixaToggleWrapper()?.classList?.add('dixa-messenge-wrapper--quick-add');\n};\n\nconst hideAttentivePopup = (mutations_list, observer) => {\n  const attentiveWrapper = document.getElementById('#attentive_overlay');\n\n  if (attentiveWrapper instanceof HTMLElement) {\n    observer.disconnect();\n    attentiveWrapper.style.zIndex = '1';\n  }\n};\n","// @ts-check\n\nimport { loadPageData } from './page';\n\nlet hashState = false;\n\nexport const initUrlHandlers = () => {\n  // On anchor click, store hash flag as true\n  document.body.addEventListener('click', (e) => {\n    if (!(e.target instanceof Element)) {\n      return;\n    }\n\n    const a = e.target.closest('a');\n    if (a && a.href.startsWith('#')) {\n      hashState = true;\n    }\n  });\n\n  // Check if the event is coming from an anchor, if so don't reload page.\n  window.addEventListener('popstate', (e) => {\n    if (hashState) {\n      e.preventDefault();\n      hashState = false;\n      return false;\n    }\n\n    loadPageData(new URL(window.location.href));\n  });\n\n  // Check for hash change, if true go to anchor if not scroll to top of page.\n  window.addEventListener('hashchange', () => {\n    const id = window.location.hash.slice(1);\n\n    if (id) {\n      document.getElementById(id)?.scrollIntoView();\n    } else {\n      window.scrollTo(0, 0);\n    }\n  });\n};\n","// @ts-check\n\nimport { onDOMContentLoaded } from '../util/loaded';\nimport { initChoosers } from '../pdp/chooser';\nimport { initGallery } from '../pdp/gallery';\nimport { initDimensions } from '../pdp/dimensions';\nimport { initTracking } from '../pdp/tracking';\nimport { initInfo } from '../pdp/info-overlays';\nimport { initBasket } from '../pdp/basket';\nimport { initCylindo } from '../pdp/cylindo';\nimport { initQuickAddBar } from '../pdp/quick-add-overlay';\nimport { initUrlHandlers } from '../pdp/hash';\n\n// Initialise bits when the DOM and deferred scripts have loaded.\nonDOMContentLoaded(() => {\n  initUrlHandlers();\n  initChoosers();\n  initGallery();\n  initDimensions();\n  initTracking();\n  initInfo();\n  initBasket();\n  initCylindo();\n  initQuickAddBar();\n});\n","// @ts-check\n\nimport {\n  applyOptionsToUrl,\n  initChoosersForContainer,\n  loadChoiceInfoOverlay,\n  loadChooserOverlay,\n} from './chooser/chooser-helpers';\nimport { productOptionChanged } from './chooser/constants';\nimport { handleFragmentInit } from './fragments';\nimport { loadPageData } from './page';\nimport { replaceElementHTML } from './replace';\nimport { initQuantitySteppers } from './quantity-steppers';\nimport { SwatchCategoryFilter } from '../swatch/SwatchCategoryFilter.js';\nimport { isOverlayOpen } from '../features/overlays/index.js';\n\nexport const initChoosers = () => {\n  handleFragmentInit(({ replace }) => {\n    if (replace?.productConfig) {\n      replaceElementHTML('.product-config', replace.productConfig);\n    }\n\n    const colorContainer = document.querySelector('[data-swatch-category-container]');\n    const swatchCategoryFilter = new SwatchCategoryFilter(colorContainer);\n    const productConfigContainer = document.querySelector('.product-config');\n    const productOptionsInfoOverlay = document.querySelectorAll('.product-config__info');\n\n    initQuantitySteppers(productConfigContainer);\n\n    if (productConfigContainer instanceof HTMLElement) {\n      // Add click event handlers to any product chooser buttons, which open the\n      // corresponding chooser overlay.\n      productConfigContainer.querySelectorAll('.product-button:not(.product-button--read-only)').forEach((btn) => {\n        if (!(btn instanceof HTMLElement && 'overlayUrl' in btn.dataset)) {\n          return;\n        }\n\n        btn.addEventListener('click', () => {\n          loadChooserOverlay(btn.dataset.overlayUrl, { showPlaceholder: true });\n        });\n      });\n\n      productConfigContainer\n        .querySelectorAll('[data-upsell-chooser]')\n        .forEach((btn) => {\n          btn.addEventListener('click', () => {\n            if (btn instanceof HTMLElement && 'overlayUrl' in btn.dataset) {\n              loadChooserOverlay(btn.dataset.overlayUrl, { showPlaceholder: true });\n            }\n          });\n        });\n\n      initChoosersForContainer(productConfigContainer);\n    }\n\n    productOptionsInfoOverlay\n      .forEach(btn => {\n        btn.addEventListener('click', loadChoiceInfoOverlay)\n      });\n  });\n\n  // When a product option is changed, load new data for the page.\n  // Will also removed has and scroll to top of page\n  document.body.addEventListener(productOptionChanged, (e) => {\n    const { optionValues } = e.detail;\n\n    const url = new URL(window.location.href);\n    url.hash = '';\n\n    if (!isOverlayOpen()) {\n      window.scrollTo(0, 0);\n    }\n\n    applyOptionsToUrl(url, optionValues);\n    loadPageData(url);\n  });\n};\n","// @ts-check\n\nimport { initBasketForm } from '../features/basket';\nimport { handleFragmentInit } from './fragments';\nimport { replaceElementHTML } from './replace'\nimport { initEmbeddedListing } from '../listing/embedded';\n\n/**\n * Initialise the main add to basket form on the PDP.\n */\nexport const initBasket = () => {\n  handleFragmentInit(({ replace }) => {\n    if (replace?.addToBasket) {\n      replaceElementHTML('.product_basket', replace.addToBasket);\n    }\n\n    const form = document.querySelector('form.product-details__action');\n    if (form instanceof HTMLFormElement) {\n      initBasketForm(form);\n    }\n\n    document.querySelectorAll('.listing--embedded').forEach((listing) => {\n      initEmbeddedListing({ container: listing });\n    });\n  });\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","lGEvents","lightGalleryCoreSettings","mode","easing","speed","licenseKey","height","width","addClass","startClass","backdropDuration","container","startAnimationDuration","zoomFromOrigin","hideBarsDelay","showBarsAfter","slideDelay","supportLegacyBrowser","allowMediaOverlap","videoMaxSize","loadYouTubePoster","defaultCaptionHeight","ariaLabelledby","ariaDescribedby","resetScrollPosition","hideScrollbar","closable","swipeToClose","closeOnTap","showCloseIcon","showMaximizeIcon","loop","escKey","keyPress","trapFocus","controls","slideEndAnimation","hideControlOnEnd","mousewheel","getCaptionFromTitleOrAlt","appendSubHtmlTo","subHtmlSelectorRelative","preload","numberOfSlideItemsInDom","selector","selectWithin","nextHtml","prevHtml","index","iframeWidth","iframeHeight","iframeMaxWidth","iframeMaxHeight","download","counter","appendCounterTo","swipeThreshold","enableSwipe","enableDrag","dynamic","dynamicEl","extraProps","exThumbImage","isMobile","undefined","mobileSettings","plugins","strings","closeGallery","toggleMaximize","previousSlide","nextSlide","playVideo","mediaLoadingFailed","lgQuery","cssVenderPrefixes","_getSelector","firstElement","_getFirstEl","generateUUID","replace","c","r","Math","random","toString","context","document","substring","querySelector","querySelectorAll","_each","func","forEach","_setCssVendorPrefix","el","cssProperty","value","property","group1","toUpperCase","indexOf","style","charAt","toLowerCase","slice","isEventMatched","event","eventName","eventNamespace","split","filter","e","every","attr","getAttribute","setAttribute","find","$LG","first","eq","parent","parentElement","get","removeAttr","attributes","attrs","removeAttribute","wrap","className","wrapper","createElement","parentNode","insertBefore","removeChild","appendChild","classNames","classList","add","removeClass","remove","hasClass","contains","hasAttribute","attribute","toggleClass","css","_this","on","events","listener","Array","isArray","eventListeners","push","addEventListener","once","off","keys","removeEventListener","trigger","detail","customEvent","CustomEvent","dispatchEvent","load","url","fetch","then","res","text","html","innerHTML","append","insertAdjacentHTML","prepend","empty","scrollTop","body","documentElement","window","pageYOffset","scrollLeft","pageXOffset","offset","left","top","rect","getBoundingClientRect","bodyMarginLeft","marginLeft","parseFloat","currentStyle","getComputedStyle","clientWidth","paddingLeft","paddingRight","clientHeight","paddingTop","paddingBottom","params","bubbles","cancelable","evt","createEvent","initCustomEvent","Element","matches","msMatchesSelector","webkitMatchesSelector","defaultDynamicOptions","convertToData","g","utils","spacing","defaultLgSize","lgSize","isResponsiveSizes","wWidth","innerWidth","size_1","parseInt","size","cWidth","cHeight","maxWidth","min","maxHeight","ratio","bottom","imageSize","LGel","containerRect","wHeight","elWidth","elHeight","elStyle","x","borderLeft","y","borderTop","src","iframeTitle","altAttr","srcset","sizes","sources","imgMarkup","sourceTag","JSON","parse","map","source","key","srcItms","rsWidth","rsSrc","_src","splice","j","img","complete","naturalWidth","_poster","dummyImg","videoContStyle","playVideoString","_isVideo","youtube","vimeo","elements","element","display","visibility","items","dynamicElements","availableDynamicOptions","il","k","a","jl","__spreadArrays","item","specified","dynamicAttr","name","label","currentItem","alt","title","thumb","subHtml","test","navigator","userAgent","isHTML5VIdeo","html5","console","error","match","wistia","lgId","LightGallery","options","lgOpened","lGalleryOn","lgBusy","currentItemsInDom","prevScrollTop","bodyPaddingRight","isDummyImageRemoved","dragOrSwipeEnabled","mediaContainerPosition","generateSettings","buildModules","settings","galleryItems","getItems","normalizeSettings","init","validateLicense","addSlideVideoInfo","buildStructure","instance","setTimeout","triggerPosterClick","arrow","openGalleryOnItemClick","_loop_1","this_1","$element","uuid","preventDefault","currentItemIndex","openGallery","plugin","warn","getSlideItem","getSlideItemId","getIdName","id","getElementById","manageSingleSlideClassName","outer","$container","subHtmlCont","addClasses","containerClassName","closeIcon","maximizeIcon","template","$lgComponents","$backdrop","$inner","$content","$toolbar","outerClassNames","refreshOnResize","hideBars","manageCloseGallery","initModules","__slideVideoInfo","getMediaContainerPosition","_a","top_1","currentImageSize","resizeVideoSlide","imgStyle","getDummyImgStyles","lgVideoStyle","getVideoContStyle","updateSlides","currentSrc","updateControls","_index","some","galleryItem","itemIndex","organizeSlideItems","loadContent","updateCurrentCounter","children","shouldHideScrollbar","bodyRect","scrollbarWidth","resetScrollBar","itemsToBeInsertedToDom","getItemsToBeInsertedToDom","addHtml","transform","setMediaContainerPosition","timeout","currentSlide_1","slide","captionHeight","thumbContainer","clearTimeout","hideBarTimeout","initPictureFill","$img","picturefill","counterHtml","subHtmlUrl","fL","currentSlide","getDummyImageContent","$currentSlide","$currentItem","_dummyImgSrc","dummyImgContent","setImgMarkup","currentGalleryItem","isFirstSlideWithZoomAnimation","onSlideObjectLoad","$slide","isHTML5VideoWithoutPoster","onLoad","onError","mediaObject","onLgObjectLoad","delay","isFirstSlide","triggerSlideItemLoad","_speed","getSlideType","poster","video","rec","_html5Video","responsive","srcDyItms","videoInfo","iframe","top_2","videoSize","markup","html5Video","hasPoster","loadContentOnFirstSlideLoad","prevIndex","numberOfItems","possibleNumberOfItems","max","prevIndexItem","_element","idx","numberOfExistingItems","getPreviousSlideIndex","currentItemId","setDownloadValue","downloadUrl","$download","makeSlideAnimation","direction","currentSlideItem","previousSlideItem","fromTouch","fromThumb","numberOfGalleryItems","previousSlideItem_1","top_3","arrowDisable","touchPrev","touchNext","updateCounterTotal","touchMove","startCoords","endCoords","distanceX","pageX","distanceY","pageY","allowSwipe","swipeDirection","abs","setTranslate","offsetWidth","gutter","opacity","innerHeight","scale","touchEnd","distance","triggerClick","distanceAbs","goToNextSlide","goToPrevSlide","target","isPosterElement","isMoved","isSwiping","$item","touches","touchAction","manageSwipeClass","isDraging","_touchNext","_touchPrev","_loop","keyCode","$prev","$next","$el","xValue","yValue","scaleX","scaleY","lastCall","deltaY","now","Date","getTime","isSlideElement","playButton","invalidateItems","focus","preventScroll","focusableEls","firstFocusableEl","lastFocusableEl","shiftKey","activeElement","mousedown","force","top_4","_b","destroyModules","removeTimeout","blur","module","err","destroy","refresh","destroyGallery","closeTimeout","bind","lightGallery","zoomSettings","zoom","infiniteZoom","actualSize","showZoomInOutIcons","actualSizeIcons","zoomIn","zoomOut","enableZoomAfter","zoomPluginStrings","viewActualSize","Zoom","core","buildTemplates","zoomIcons","enableZoom","zoomableTimeout","isImageSlide","setZoomEssentials","enableZoomOnSlideItemLoad","getDragCords","getSwipeCords","getDragAllowedAxises","scaleDiff","$image","offsetHeight","allowY","allowX","zoomImage","reposition","resetToMax","originalX","originalY","offsetX","offsetY","positionChanged","dragAllowedAxises","possibleSwipeCords","getPossibleSwipeDragCords","_x","_y","scaleVal","isBeyondPossibleLeft","minX","isBeyondPossibleRight","maxX","isBeyondPossibleTop","minY","isBeyondPossibleBottom","maxY","setZoomStyles","setZoomImageSize","resetImageTranslate","imageReset","actualSizeScale","getCurrentImageActualSizeScale","naturalHeight","ZOOM_TRANSITION_DURATION","$imageWrap","$dummyImage","setActualSize","zoomInProgress","prevScale","getScale","setPageCords","beginZoom","getNaturalWidth","getActualSizeScale","getPageCords","cords","pageCords","manageActualPixelClassNames","resetZoom","tapped","$target","_LGel","setZoomSwipeStyles","zoomDrag","pinchZoom","zoomSwipe","$actualSize","getTouchDistance","sqrt","startDist","pinchStarted","initScale","endDist","_scale","round","Number","EPSILON","diff","touchendZoom","touchDuration","distanceXnew","distanceYnew","speedX","speedY","getZoomSwipeCords","diffMinY","diffMaxY","diffMinX","difMaxX","imgRect","imageHeight","imageWidth","startTime","valueOf","endTime","isDragging","_initSwatchPanel","_classPrivateFieldLooseKey","_renderSwatchBasket","NabASwatch","constructor","colour","sku","loadNabASwatchOverlay","loadOverlay","modifiers","callback","_classPrivateFieldLooseBase","defineProperty","writable","Overlay","initSwatchPanel","swatchSelectedEvent","handleLocalStorage","overlayCallback","swatchBasket","SwatchBasket","renderSwatchBasket","overlayUrl","initGallery","handleFragmentInit","gallery","replaceElementHTML","initGalleryCylindoViewer","initGallerySliders","initGallerySwatchButtons","initGalleryVideo","initLightGallery","initLightGalleryBump","SwatchForm","thumbs","thumbSwiper","initialiseSwiper","swiper","addToSwatchesButtons","addToSwatchesButton","_JSON$parse","stopPropagation","btn","closest","swatchObject","dataset","optionValues","longTitle","hex","categoryClass","backgroundCSS","swatchBackground","swatches","localStorage","getItem","stockitem","MAX_BASKET_SWATCHES","addToLocalStorage","elm","VideoPlayer","lgZoom","showBumpButton","bumpGallery","initDimensions","dimensionsblock","rows","_document$querySelect","dimsV2","DimensionsV2","pdpDataEvent","option","kind","optionKindSize","setSelectedSize","initialSize","_cookies$find","cookie","kv","trimStart","startsWith","initOverlayButtons","iosCylindoSlideFix","oldState","viewer","includes","platform","galleryWrap","open","cylindoSlide","pointerEvents","resetCylindoSlide","moveCylindoSlide","mobileObservedSelector","nonMobileObservedSelector","showBar","entries","bar","entry","mobile","showed","HTMLElement","toggle","isIntersecting","updateDixaOffset","barShowing","barEl","_getDixaContainer","_getDixaToggleWrapper","scrollHeight","setDixaOffset","getDixaContainer","getDixaToggleWrapper","hideAttentivePopup","mutations_list","observer","attentiveWrapper","disconnect","zIndex","hashState","onDOMContentLoaded","href","loadPageData","URL","location","hash","_document$getElementB","scrollIntoView","scrollTo","productConfig","colorContainer","SwatchCategoryFilter","productConfigContainer","productOptionsInfoOverlay","initQuantitySteppers","loadChooserOverlay","showPlaceholder","initChoosersForContainer","loadChoiceInfoOverlay","productOptionChanged","isOverlayOpen","applyOptionsToUrl","initTracking","initInfo","addToBasket","form","HTMLFormElement","initBasketForm","listing","initEmbeddedListing","initQuickAddBar","headerHeight","header","noticeBar","IntersectionObserver","rootMargin","observerAttentive","MutationObserver","addToBasketQuick","quickAddBar","outerWrap","observe","subtree","childList"],"mappings":"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","x_google_ignoreList":[0,1]}