{"version":3,"file":"product-landing-C6ZPb5lq.js","sources":["../../../../../../.yarn/berry/cache/swiper-npm-11.1.14-8126fa478a-10c0.zip/node_modules/swiper/shared/ssr-window.esm.mjs","../../../../../../.yarn/berry/cache/swiper-npm-11.1.14-8126fa478a-10c0.zip/node_modules/swiper/shared/utils.mjs","../../../../../../.yarn/berry/cache/swiper-npm-11.1.14-8126fa478a-10c0.zip/node_modules/swiper/shared/swiper-core.mjs","../../../../../../.yarn/berry/cache/swiper-npm-11.1.14-8126fa478a-10c0.zip/node_modules/swiper/shared/create-element-if-not-defined.mjs","../../../../../../.yarn/berry/cache/swiper-npm-11.1.14-8126fa478a-10c0.zip/node_modules/swiper/modules/navigation.mjs","../../../../../../.yarn/berry/cache/photoswipe-npm-5.4.4-f7a755162f-10c0.zip/node_modules/photoswipe/dist/photoswipe-lightbox.esm.js","../../../app/frontend/js/product-landing.js"],"sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n const children = [...element.children];\n if (element instanceof HTMLSlotElement) {\n children.push(...element.assignedElements());\n }\n if (!selector) {\n return children;\n }\n return children.filter(el => el.matches(selector));\n}\nfunction elementIsChildOf(el, parent) {\n const isChild = parent.contains(el);\n if (!isChild && parent instanceof HTMLSlotElement) {\n const children = [...parent.assignedElements()];\n return children.includes(el);\n }\n return isChild;\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\nfunction getRotateFix(swiper) {\n return v => {\n if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n return v + 0.001;\n }\n return v;\n };\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, getRotateFix as o, elementStyle as p, elementNextAll as q, elementPrevAll as r, setCSSProperty as s, animateCSSModeScroll as t, showWarning as u, elementIsChildOf as v, extend as w, deleteProps as x };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, p as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, q as elementNextAll, r as elementPrevAll, j as getTranslate, t as animateCSSModeScroll, n as nextTick, u as showWarning, c as createElement, v as elementIsChildOf, d as now, w as extend, h as elementIndex, x as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n if (allSlidesSize + offsetSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // initial virtual\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides\n } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides\n } = params;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n document.activeElement.blur();\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el) || swiper.hostEl.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n } else if (res && res.length === 1) {\n res = res[0];\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n if (swiper.isElement && !targetIsButton) {\n const path = e.path || e.composedPath && e.composedPath();\n if (path) {\n targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n }\n }\n if (swiper.params.navigation.hideOnClick && !targetIsButton) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n","/*!\n * PhotoSwipe Lightbox 5.4.4 - https://photoswipe.com\n * (c) 2024 Dmytro Semenov\n */\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/**\r\n * @template {keyof HTMLElementTagNameMap} T\r\n * @param {string} className\r\n * @param {T} tagName\r\n * @param {Node} [appendToEl]\r\n * @returns {HTMLElementTagNameMap[T]}\r\n */\nfunction createElement(className, tagName, appendToEl) {\n const el = document.createElement(tagName);\n\n if (className) {\n el.className = className;\n }\n\n if (appendToEl) {\n appendToEl.appendChild(el);\n }\n\n return el;\n}\n/**\r\n * Get transform string\r\n *\r\n * @param {number} x\r\n * @param {number} [y]\r\n * @param {number} [scale]\r\n * @returns {string}\r\n */\n\nfunction toTransformString(x, y, scale) {\n let propValue = `translate3d(${x}px,${y || 0}px,0)`;\n\n if (scale !== undefined) {\n propValue += ` scale3d(${scale},${scale},1)`;\n }\n\n return propValue;\n}\n/**\r\n * Apply width and height CSS properties to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string | number} w\r\n * @param {string | number} h\r\n */\n\nfunction setWidthHeight(el, w, h) {\n el.style.width = typeof w === 'number' ? `${w}px` : w;\n el.style.height = typeof h === 'number' ? `${h}px` : h;\n}\n/** @typedef {LOAD_STATE[keyof LOAD_STATE]} LoadState */\n\n/** @type {{ IDLE: 'idle'; LOADING: 'loading'; LOADED: 'loaded'; ERROR: 'error' }} */\n\nconst LOAD_STATE = {\n IDLE: 'idle',\n LOADING: 'loading',\n LOADED: 'loaded',\n ERROR: 'error'\n};\n/**\r\n * Check if click or keydown event was dispatched\r\n * with a special key or via mouse wheel.\r\n *\r\n * @param {MouseEvent | KeyboardEvent} e\r\n * @returns {boolean}\r\n */\n\nfunction specialKeyUsed(e) {\n return 'button' in e && e.button === 1 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey;\n}\n/**\r\n * Parse `gallery` or `children` options.\r\n *\r\n * @param {import('../photoswipe.js').ElementProvider} [option]\r\n * @param {string} [legacySelector]\r\n * @param {HTMLElement | Document} [parent]\r\n * @returns HTMLElement[]\r\n */\n\nfunction getElementsFromOption(option, legacySelector, parent = document) {\n /** @type {HTMLElement[]} */\n let elements = [];\n\n if (option instanceof Element) {\n elements = [option];\n } else if (option instanceof NodeList || Array.isArray(option)) {\n elements = Array.from(option);\n } else {\n const selector = typeof option === 'string' ? option : legacySelector;\n\n if (selector) {\n elements = Array.from(parent.querySelectorAll(selector));\n }\n }\n\n return elements;\n}\n/**\r\n * Check if variable is PhotoSwipe class\r\n *\r\n * @param {any} fn\r\n * @returns {boolean}\r\n */\n\nfunction isPswpClass(fn) {\n return typeof fn === 'function' && fn.prototype && fn.prototype.goTo;\n}\n/**\r\n * Check if browser is Safari\r\n *\r\n * @returns {boolean}\r\n */\n\nfunction isSafari() {\n return !!(navigator.vendor && navigator.vendor.match(/apple/i));\n}\n\n/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\n\n/** @typedef {import('../ui/ui-element.js').UIElementData} UIElementData */\n\n/** @typedef {import('../slide/content.js').default} ContentDefault */\n\n/** @typedef {import('../slide/slide.js').default} Slide */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/** @typedef {import('../slide/zoom-level.js').default} ZoomLevel */\n\n/** @typedef {import('../slide/get-thumb-bounds.js').Bounds} Bounds */\n\n/**\r\n * Allow adding an arbitrary props to the Content\r\n * https://photoswipe.com/custom-content/#using-webp-image-format\r\n * @typedef {ContentDefault & Record} Content\r\n */\n\n/** @typedef {{ x?: number; y?: number }} Point */\n\n/**\r\n * @typedef {Object} PhotoSwipeEventsMap https://photoswipe.com/events/\r\n *\r\n *\r\n * https://photoswipe.com/adding-ui-elements/\r\n *\r\n * @prop {undefined} uiRegister\r\n * @prop {{ data: UIElementData }} uiElementCreate\r\n *\r\n *\r\n * https://photoswipe.com/events/#initialization-events\r\n *\r\n * @prop {undefined} beforeOpen\r\n * @prop {undefined} firstUpdate\r\n * @prop {undefined} initialLayout\r\n * @prop {undefined} change\r\n * @prop {undefined} afterInit\r\n * @prop {undefined} bindEvents\r\n *\r\n *\r\n * https://photoswipe.com/events/#opening-or-closing-transition-events\r\n *\r\n * @prop {undefined} openingAnimationStart\r\n * @prop {undefined} openingAnimationEnd\r\n * @prop {undefined} closingAnimationStart\r\n * @prop {undefined} closingAnimationEnd\r\n *\r\n *\r\n * https://photoswipe.com/events/#closing-events\r\n *\r\n * @prop {undefined} close\r\n * @prop {undefined} destroy\r\n *\r\n *\r\n * https://photoswipe.com/events/#pointer-and-gesture-events\r\n *\r\n * @prop {{ originalEvent: PointerEvent }} pointerDown\r\n * @prop {{ originalEvent: PointerEvent }} pointerMove\r\n * @prop {{ originalEvent: PointerEvent }} pointerUp\r\n * @prop {{ bgOpacity: number }} pinchClose can be default prevented\r\n * @prop {{ panY: number }} verticalDrag can be default prevented\r\n *\r\n *\r\n * https://photoswipe.com/events/#slide-content-events\r\n *\r\n * @prop {{ content: Content }} contentInit\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoad can be default prevented\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoadImage can be default prevented\r\n * @prop {{ content: Content; slide: Slide; isError?: boolean }} loadComplete\r\n * @prop {{ content: Content; slide: Slide }} loadError\r\n * @prop {{ content: Content; width: number; height: number }} contentResize can be default prevented\r\n * @prop {{ content: Content; width: number; height: number; slide: Slide }} imageSizeChange\r\n * @prop {{ content: Content }} contentLazyLoad can be default prevented\r\n * @prop {{ content: Content }} contentAppend can be default prevented\r\n * @prop {{ content: Content }} contentActivate can be default prevented\r\n * @prop {{ content: Content }} contentDeactivate can be default prevented\r\n * @prop {{ content: Content }} contentRemove can be default prevented\r\n * @prop {{ content: Content }} contentDestroy can be default prevented\r\n *\r\n *\r\n * undocumented\r\n *\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} imageClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} bgClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} tapAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} doubleTapAction can be default prevented\r\n *\r\n * @prop {{ originalEvent: KeyboardEvent }} keydown can be default prevented\r\n * @prop {{ x: number; dragging: boolean }} moveMainScroll\r\n * @prop {{ slide: Slide }} firstZoomPan\r\n * @prop {{ slide: Slide | undefined, data: SlideData, index: number }} gettingData\r\n * @prop {undefined} beforeResize\r\n * @prop {undefined} resize\r\n * @prop {undefined} viewportSize\r\n * @prop {undefined} updateScrollOffset\r\n * @prop {{ slide: Slide }} slideInit\r\n * @prop {{ slide: Slide }} afterSetContent\r\n * @prop {{ slide: Slide }} slideLoad\r\n * @prop {{ slide: Slide }} appendHeavy can be default prevented\r\n * @prop {{ slide: Slide }} appendHeavyContent\r\n * @prop {{ slide: Slide }} slideActivate\r\n * @prop {{ slide: Slide }} slideDeactivate\r\n * @prop {{ slide: Slide }} slideDestroy\r\n * @prop {{ destZoomLevel: number, centerPoint: Point | undefined, transitionDuration: number | false | undefined }} beforeZoomTo\r\n * @prop {{ slide: Slide }} zoomPanUpdate\r\n * @prop {{ slide: Slide }} initialZoomPan\r\n * @prop {{ slide: Slide }} calcSlideSize\r\n * @prop {undefined} resolutionChanged\r\n * @prop {{ originalEvent: WheelEvent }} wheel can be default prevented\r\n * @prop {{ content: Content }} contentAppendImage can be default prevented\r\n * @prop {{ index: number; itemData: SlideData }} lazyLoadSlide can be default prevented\r\n * @prop {undefined} lazyLoad\r\n * @prop {{ slide: Slide }} calcBounds\r\n * @prop {{ zoomLevels: ZoomLevel, slideData: SlideData }} zoomLevelsUpdate\r\n *\r\n *\r\n * legacy\r\n *\r\n * @prop {undefined} init\r\n * @prop {undefined} initialZoomIn\r\n * @prop {undefined} initialZoomOut\r\n * @prop {undefined} initialZoomInEnd\r\n * @prop {undefined} initialZoomOutEnd\r\n * @prop {{ dataSource: DataSource | undefined, numItems: number }} numItems\r\n * @prop {{ itemData: SlideData; index: number }} itemData\r\n * @prop {{ index: number, itemData: SlideData, instance: PhotoSwipe }} thumbBounds\r\n */\n\n/**\r\n * @typedef {Object} PhotoSwipeFiltersMap https://photoswipe.com/filters/\r\n *\r\n * @prop {(numItems: number, dataSource: DataSource | undefined) => number} numItems\r\n * Modify the total amount of slides. Example on Data sources page.\r\n * https://photoswipe.com/filters/#numitems\r\n *\r\n * @prop {(itemData: SlideData, index: number) => SlideData} itemData\r\n * Modify slide item data. Example on Data sources page.\r\n * https://photoswipe.com/filters/#itemdata\r\n *\r\n * @prop {(itemData: SlideData, element: HTMLElement, linkEl: HTMLAnchorElement) => SlideData} domItemData\r\n * Modify item data when it's parsed from DOM element. Example on Data sources page.\r\n * https://photoswipe.com/filters/#domitemdata\r\n *\r\n * @prop {(clickedIndex: number, e: MouseEvent, instance: PhotoSwipeLightbox) => number} clickedIndex\r\n * Modify clicked gallery item index.\r\n * https://photoswipe.com/filters/#clickedindex\r\n *\r\n * @prop {(placeholderSrc: string | false, content: Content) => string | false} placeholderSrc\r\n * Modify placeholder image source.\r\n * https://photoswipe.com/filters/#placeholdersrc\r\n *\r\n * @prop {(isContentLoading: boolean, content: Content) => boolean} isContentLoading\r\n * Modify if the content is currently loading.\r\n * https://photoswipe.com/filters/#iscontentloading\r\n *\r\n * @prop {(isContentZoomable: boolean, content: Content) => boolean} isContentZoomable\r\n * Modify if the content can be zoomed.\r\n * https://photoswipe.com/filters/#iscontentzoomable\r\n *\r\n * @prop {(useContentPlaceholder: boolean, content: Content) => boolean} useContentPlaceholder\r\n * Modify if the placeholder should be used for the content.\r\n * https://photoswipe.com/filters/#usecontentplaceholder\r\n *\r\n * @prop {(isKeepingPlaceholder: boolean, content: Content) => boolean} isKeepingPlaceholder\r\n * Modify if the placeholder should be kept after the content is loaded.\r\n * https://photoswipe.com/filters/#iskeepingplaceholder\r\n *\r\n *\r\n * @prop {(contentErrorElement: HTMLElement, content: Content) => HTMLElement} contentErrorElement\r\n * Modify an element when the content has error state (for example, if image cannot be loaded).\r\n * https://photoswipe.com/filters/#contenterrorelement\r\n *\r\n * @prop {(element: HTMLElement, data: UIElementData) => HTMLElement} uiElement\r\n * Modify a UI element that's being created.\r\n * https://photoswipe.com/filters/#uielement\r\n *\r\n * @prop {(thumbnail: HTMLElement | null | undefined, itemData: SlideData, index: number) => HTMLElement} thumbEl\r\n * Modify the thumbnail element from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbel\r\n *\r\n * @prop {(thumbBounds: Bounds | undefined, itemData: SlideData, index: number) => Bounds} thumbBounds\r\n * Modify the thumbnail bounds from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbbounds\r\n *\r\n * @prop {(srcsetSizesWidth: number, content: Content) => number} srcsetSizesWidth\r\n *\r\n * @prop {(preventPointerEvent: boolean, event: PointerEvent, pointerType: string) => boolean} preventPointerEvent\r\n *\r\n */\n\n/**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @typedef {{ fn: PhotoSwipeFiltersMap[T], priority: number }} Filter\r\n */\n\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {PhotoSwipeEventsMap[T] extends undefined ? PhotoSwipeEvent : PhotoSwipeEvent & PhotoSwipeEventsMap[T]} AugmentedEvent\r\n */\n\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {(event: AugmentedEvent) => void} EventCallback\r\n */\n\n/**\r\n * Base PhotoSwipe event object\r\n *\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n */\nclass PhotoSwipeEvent {\n /**\r\n * @param {T} type\r\n * @param {PhotoSwipeEventsMap[T]} [details]\r\n */\n constructor(type, details) {\n this.type = type;\n this.defaultPrevented = false;\n\n if (details) {\n Object.assign(this, details);\n }\n }\n\n preventDefault() {\n this.defaultPrevented = true;\n }\n\n}\n/**\r\n * PhotoSwipe base class that can listen and dispatch for events.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\r\n */\n\n\nclass Eventable {\n constructor() {\n /**\r\n * @type {{ [T in keyof PhotoSwipeEventsMap]?: ((event: AugmentedEvent) => void)[] }}\r\n */\n this._listeners = {};\n /**\r\n * @type {{ [T in keyof PhotoSwipeFiltersMap]?: Filter[] }}\r\n */\n\n this._filters = {};\n /** @type {PhotoSwipe | undefined} */\n\n this.pswp = undefined;\n /** @type {PhotoSwipeOptions | undefined} */\n\n this.options = undefined;\n }\n /**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @param {T} name\r\n * @param {PhotoSwipeFiltersMap[T]} fn\r\n * @param {number} priority\r\n */\n\n\n addFilter(name, fn, priority = 100) {\n var _this$_filters$name, _this$_filters$name2, _this$pswp;\n\n if (!this._filters[name]) {\n this._filters[name] = [];\n }\n\n (_this$_filters$name = this._filters[name]) === null || _this$_filters$name === void 0 || _this$_filters$name.push({\n fn,\n priority\n });\n (_this$_filters$name2 = this._filters[name]) === null || _this$_filters$name2 === void 0 || _this$_filters$name2.sort((f1, f2) => f1.priority - f2.priority);\n (_this$pswp = this.pswp) === null || _this$pswp === void 0 || _this$pswp.addFilter(name, fn, priority);\n }\n /**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @param {T} name\r\n * @param {PhotoSwipeFiltersMap[T]} fn\r\n */\n\n\n removeFilter(name, fn) {\n if (this._filters[name]) {\n // @ts-expect-error\n this._filters[name] = this._filters[name].filter(filter => filter.fn !== fn);\n }\n\n if (this.pswp) {\n this.pswp.removeFilter(name, fn);\n }\n }\n /**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @param {T} name\r\n * @param {Parameters} args\r\n * @returns {Parameters[0]}\r\n */\n\n\n applyFilters(name, ...args) {\n var _this$_filters$name3;\n\n (_this$_filters$name3 = this._filters[name]) === null || _this$_filters$name3 === void 0 || _this$_filters$name3.forEach(filter => {\n // @ts-expect-error\n args[0] = filter.fn.apply(this, args);\n });\n return args[0];\n }\n /**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @param {T} name\r\n * @param {EventCallback} fn\r\n */\n\n\n on(name, fn) {\n var _this$_listeners$name, _this$pswp2;\n\n if (!this._listeners[name]) {\n this._listeners[name] = [];\n }\n\n (_this$_listeners$name = this._listeners[name]) === null || _this$_listeners$name === void 0 || _this$_listeners$name.push(fn); // When binding events to lightbox,\n // also bind events to PhotoSwipe Core,\n // if it's open.\n\n (_this$pswp2 = this.pswp) === null || _this$pswp2 === void 0 || _this$pswp2.on(name, fn);\n }\n /**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @param {T} name\r\n * @param {EventCallback} fn\r\n */\n\n\n off(name, fn) {\n var _this$pswp3;\n\n if (this._listeners[name]) {\n // @ts-expect-error\n this._listeners[name] = this._listeners[name].filter(listener => fn !== listener);\n }\n\n (_this$pswp3 = this.pswp) === null || _this$pswp3 === void 0 || _this$pswp3.off(name, fn);\n }\n /**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @param {T} name\r\n * @param {PhotoSwipeEventsMap[T]} [details]\r\n * @returns {AugmentedEvent}\r\n */\n\n\n dispatch(name, details) {\n var _this$_listeners$name2;\n\n if (this.pswp) {\n return this.pswp.dispatch(name, details);\n }\n\n const event =\n /** @type {AugmentedEvent} */\n new PhotoSwipeEvent(name, details);\n (_this$_listeners$name2 = this._listeners[name]) === null || _this$_listeners$name2 === void 0 || _this$_listeners$name2.forEach(listener => {\n listener.call(this, event);\n });\n return event;\n }\n\n}\n\nclass Placeholder {\n /**\r\n * @param {string | false} imageSrc\r\n * @param {HTMLElement} container\r\n */\n constructor(imageSrc, container) {\n // Create placeholder\n // (stretched thumbnail or simple div behind the main image)\n\n /** @type {HTMLImageElement | HTMLDivElement | null} */\n this.element = createElement('pswp__img pswp__img--placeholder', imageSrc ? 'img' : 'div', container);\n\n if (imageSrc) {\n const imgEl =\n /** @type {HTMLImageElement} */\n this.element;\n imgEl.decoding = 'async';\n imgEl.alt = '';\n imgEl.src = imageSrc;\n imgEl.setAttribute('role', 'presentation');\n }\n\n this.element.setAttribute('aria-hidden', 'true');\n }\n /**\r\n * @param {number} width\r\n * @param {number} height\r\n */\n\n\n setDisplayedSize(width, height) {\n if (!this.element) {\n return;\n }\n\n if (this.element.tagName === 'IMG') {\n // Use transform scale() to modify img placeholder size\n // (instead of changing width/height directly).\n // This helps with performance, specifically in iOS15 Safari.\n setWidthHeight(this.element, 250, 'auto');\n this.element.style.transformOrigin = '0 0';\n this.element.style.transform = toTransformString(0, 0, width / 250);\n } else {\n setWidthHeight(this.element, width, height);\n }\n }\n\n destroy() {\n var _this$element;\n\n if ((_this$element = this.element) !== null && _this$element !== void 0 && _this$element.parentNode) {\n this.element.remove();\n }\n\n this.element = null;\n }\n\n}\n\n/** @typedef {import('./slide.js').default} Slide */\n\n/** @typedef {import('./slide.js').SlideData} SlideData */\n\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\n\n/** @typedef {import('../util/util.js').LoadState} LoadState */\n\nclass Content {\n /**\r\n * @param {SlideData} itemData Slide data\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n * @param {number} index\r\n */\n constructor(itemData, instance, index) {\n this.instance = instance;\n this.data = itemData;\n this.index = index;\n /** @type {HTMLImageElement | HTMLDivElement | undefined} */\n\n this.element = undefined;\n /** @type {Placeholder | undefined} */\n\n this.placeholder = undefined;\n /** @type {Slide | undefined} */\n\n this.slide = undefined;\n this.displayedImageWidth = 0;\n this.displayedImageHeight = 0;\n this.width = Number(this.data.w) || Number(this.data.width) || 0;\n this.height = Number(this.data.h) || Number(this.data.height) || 0;\n this.isAttached = false;\n this.hasSlide = false;\n this.isDecoding = false;\n /** @type {LoadState} */\n\n this.state = LOAD_STATE.IDLE;\n\n if (this.data.type) {\n this.type = this.data.type;\n } else if (this.data.src) {\n this.type = 'image';\n } else {\n this.type = 'html';\n }\n\n this.instance.dispatch('contentInit', {\n content: this\n });\n }\n\n removePlaceholder() {\n if (this.placeholder && !this.keepPlaceholder()) {\n // With delay, as image might be loaded, but not rendered\n setTimeout(() => {\n if (this.placeholder) {\n this.placeholder.destroy();\n this.placeholder = undefined;\n }\n }, 1000);\n }\n }\n /**\r\n * Preload content\r\n *\r\n * @param {boolean} isLazy\r\n * @param {boolean} [reload]\r\n */\n\n\n load(isLazy, reload) {\n if (this.slide && this.usePlaceholder()) {\n if (!this.placeholder) {\n const placeholderSrc = this.instance.applyFilters('placeholderSrc', // use image-based placeholder only for the first slide,\n // as rendering (even small stretched thumbnail) is an expensive operation\n this.data.msrc && this.slide.isFirstSlide ? this.data.msrc : false, this);\n this.placeholder = new Placeholder(placeholderSrc, this.slide.container);\n } else {\n const placeholderEl = this.placeholder.element; // Add placeholder to DOM if it was already created\n\n if (placeholderEl && !placeholderEl.parentElement) {\n this.slide.container.prepend(placeholderEl);\n }\n }\n }\n\n if (this.element && !reload) {\n return;\n }\n\n if (this.instance.dispatch('contentLoad', {\n content: this,\n isLazy\n }).defaultPrevented) {\n return;\n }\n\n if (this.isImageContent()) {\n this.element = createElement('pswp__img', 'img'); // Start loading only after width is defined, as sizes might depend on it.\n // Due to Safari feature, we must define sizes before srcset.\n\n if (this.displayedImageWidth) {\n this.loadImage(isLazy);\n }\n } else {\n this.element = createElement('pswp__content', 'div');\n this.element.innerHTML = this.data.html || '';\n }\n\n if (reload && this.slide) {\n this.slide.updateContentSize(true);\n }\n }\n /**\r\n * Preload image\r\n *\r\n * @param {boolean} isLazy\r\n */\n\n\n loadImage(isLazy) {\n var _this$data$src, _this$data$alt;\n\n if (!this.isImageContent() || !this.element || this.instance.dispatch('contentLoadImage', {\n content: this,\n isLazy\n }).defaultPrevented) {\n return;\n }\n\n const imageElement =\n /** @type HTMLImageElement */\n this.element;\n this.updateSrcsetSizes();\n\n if (this.data.srcset) {\n imageElement.srcset = this.data.srcset;\n }\n\n imageElement.src = (_this$data$src = this.data.src) !== null && _this$data$src !== void 0 ? _this$data$src : '';\n imageElement.alt = (_this$data$alt = this.data.alt) !== null && _this$data$alt !== void 0 ? _this$data$alt : '';\n this.state = LOAD_STATE.LOADING;\n\n if (imageElement.complete) {\n this.onLoaded();\n } else {\n imageElement.onload = () => {\n this.onLoaded();\n };\n\n imageElement.onerror = () => {\n this.onError();\n };\n }\n }\n /**\r\n * Assign slide to content\r\n *\r\n * @param {Slide} slide\r\n */\n\n\n setSlide(slide) {\n this.slide = slide;\n this.hasSlide = true;\n this.instance = slide.pswp; // todo: do we need to unset slide?\n }\n /**\r\n * Content load success handler\r\n */\n\n\n onLoaded() {\n this.state = LOAD_STATE.LOADED;\n\n if (this.slide && this.element) {\n this.instance.dispatch('loadComplete', {\n slide: this.slide,\n content: this\n }); // if content is reloaded\n\n if (this.slide.isActive && this.slide.heavyAppended && !this.element.parentNode) {\n this.append();\n this.slide.updateContentSize(true);\n }\n\n if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\n this.removePlaceholder();\n }\n }\n }\n /**\r\n * Content load error handler\r\n */\n\n\n onError() {\n this.state = LOAD_STATE.ERROR;\n\n if (this.slide) {\n this.displayError();\n this.instance.dispatch('loadComplete', {\n slide: this.slide,\n isError: true,\n content: this\n });\n this.instance.dispatch('loadError', {\n slide: this.slide,\n content: this\n });\n }\n }\n /**\r\n * @returns {Boolean} If the content is currently loading\r\n */\n\n\n isLoading() {\n return this.instance.applyFilters('isContentLoading', this.state === LOAD_STATE.LOADING, this);\n }\n /**\r\n * @returns {Boolean} If the content is in error state\r\n */\n\n\n isError() {\n return this.state === LOAD_STATE.ERROR;\n }\n /**\r\n * @returns {boolean} If the content is image\r\n */\n\n\n isImageContent() {\n return this.type === 'image';\n }\n /**\r\n * Update content size\r\n *\r\n * @param {Number} width\r\n * @param {Number} height\r\n */\n\n\n setDisplayedSize(width, height) {\n if (!this.element) {\n return;\n }\n\n if (this.placeholder) {\n this.placeholder.setDisplayedSize(width, height);\n }\n\n if (this.instance.dispatch('contentResize', {\n content: this,\n width,\n height\n }).defaultPrevented) {\n return;\n }\n\n setWidthHeight(this.element, width, height);\n\n if (this.isImageContent() && !this.isError()) {\n const isInitialSizeUpdate = !this.displayedImageWidth && width;\n this.displayedImageWidth = width;\n this.displayedImageHeight = height;\n\n if (isInitialSizeUpdate) {\n this.loadImage(false);\n } else {\n this.updateSrcsetSizes();\n }\n\n if (this.slide) {\n this.instance.dispatch('imageSizeChange', {\n slide: this.slide,\n width,\n height,\n content: this\n });\n }\n }\n }\n /**\r\n * @returns {boolean} If the content can be zoomed\r\n */\n\n\n isZoomable() {\n return this.instance.applyFilters('isContentZoomable', this.isImageContent() && this.state !== LOAD_STATE.ERROR, this);\n }\n /**\r\n * Update image srcset sizes attribute based on width and height\r\n */\n\n\n updateSrcsetSizes() {\n // Handle srcset sizes attribute.\n //\n // Never lower quality, if it was increased previously.\n // Chrome does this automatically, Firefox and Safari do not,\n // so we store largest used size in dataset.\n if (!this.isImageContent() || !this.element || !this.data.srcset) {\n return;\n }\n\n const image =\n /** @type HTMLImageElement */\n this.element;\n const sizesWidth = this.instance.applyFilters('srcsetSizesWidth', this.displayedImageWidth, this);\n\n if (!image.dataset.largestUsedSize || sizesWidth > parseInt(image.dataset.largestUsedSize, 10)) {\n image.sizes = sizesWidth + 'px';\n image.dataset.largestUsedSize = String(sizesWidth);\n }\n }\n /**\r\n * @returns {boolean} If content should use a placeholder (from msrc by default)\r\n */\n\n\n usePlaceholder() {\n return this.instance.applyFilters('useContentPlaceholder', this.isImageContent(), this);\n }\n /**\r\n * Preload content with lazy-loading param\r\n */\n\n\n lazyLoad() {\n if (this.instance.dispatch('contentLazyLoad', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n this.load(true);\n }\n /**\r\n * @returns {boolean} If placeholder should be kept after content is loaded\r\n */\n\n\n keepPlaceholder() {\n return this.instance.applyFilters('isKeepingPlaceholder', this.isLoading(), this);\n }\n /**\r\n * Destroy the content\r\n */\n\n\n destroy() {\n this.hasSlide = false;\n this.slide = undefined;\n\n if (this.instance.dispatch('contentDestroy', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n this.remove();\n\n if (this.placeholder) {\n this.placeholder.destroy();\n this.placeholder = undefined;\n }\n\n if (this.isImageContent() && this.element) {\n this.element.onload = null;\n this.element.onerror = null;\n this.element = undefined;\n }\n }\n /**\r\n * Display error message\r\n */\n\n\n displayError() {\n if (this.slide) {\n var _this$instance$option, _this$instance$option2;\n\n let errorMsgEl = createElement('pswp__error-msg', 'div');\n errorMsgEl.innerText = (_this$instance$option = (_this$instance$option2 = this.instance.options) === null || _this$instance$option2 === void 0 ? void 0 : _this$instance$option2.errorMsg) !== null && _this$instance$option !== void 0 ? _this$instance$option : '';\n errorMsgEl =\n /** @type {HTMLDivElement} */\n this.instance.applyFilters('contentErrorElement', errorMsgEl, this);\n this.element = createElement('pswp__content pswp__error-msg-container', 'div');\n this.element.appendChild(errorMsgEl);\n this.slide.container.innerText = '';\n this.slide.container.appendChild(this.element);\n this.slide.updateContentSize(true);\n this.removePlaceholder();\n }\n }\n /**\r\n * Append the content\r\n */\n\n\n append() {\n if (this.isAttached || !this.element) {\n return;\n }\n\n this.isAttached = true;\n\n if (this.state === LOAD_STATE.ERROR) {\n this.displayError();\n return;\n }\n\n if (this.instance.dispatch('contentAppend', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n const supportsDecode = ('decode' in this.element);\n\n if (this.isImageContent()) {\n // Use decode() on nearby slides\n //\n // Nearby slide images are in DOM and not hidden via display:none.\n // However, they are placed offscreen (to the left and right side).\n //\n // Some browsers do not composite the image until it's actually visible,\n // using decode() helps.\n //\n // You might ask \"why dont you just decode() and then append all images\",\n // that's because I want to show image before it's fully loaded,\n // as browser can render parts of image while it is loading.\n // We do not do this in Safari due to partial loading bug.\n if (supportsDecode && this.slide && (!this.slide.isActive || isSafari())) {\n this.isDecoding = true; // purposefully using finally instead of then,\n // as if srcset sizes changes dynamically - it may cause decode error\n\n /** @type {HTMLImageElement} */\n\n this.element.decode().catch(() => {}).finally(() => {\n this.isDecoding = false;\n this.appendImage();\n });\n } else {\n this.appendImage();\n }\n } else if (this.slide && !this.element.parentNode) {\n this.slide.container.appendChild(this.element);\n }\n }\n /**\r\n * Activate the slide,\r\n * active slide is generally the current one,\r\n * meaning the user can see it.\r\n */\n\n\n activate() {\n if (this.instance.dispatch('contentActivate', {\n content: this\n }).defaultPrevented || !this.slide) {\n return;\n }\n\n if (this.isImageContent() && this.isDecoding && !isSafari()) {\n // add image to slide when it becomes active,\n // even if it's not finished decoding\n this.appendImage();\n } else if (this.isError()) {\n this.load(false, true); // try to reload\n }\n\n if (this.slide.holderElement) {\n this.slide.holderElement.setAttribute('aria-hidden', 'false');\n }\n }\n /**\r\n * Deactivate the content\r\n */\n\n\n deactivate() {\n this.instance.dispatch('contentDeactivate', {\n content: this\n });\n\n if (this.slide && this.slide.holderElement) {\n this.slide.holderElement.setAttribute('aria-hidden', 'true');\n }\n }\n /**\r\n * Remove the content from DOM\r\n */\n\n\n remove() {\n this.isAttached = false;\n\n if (this.instance.dispatch('contentRemove', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n if (this.element && this.element.parentNode) {\n this.element.remove();\n }\n\n if (this.placeholder && this.placeholder.element) {\n this.placeholder.element.remove();\n }\n }\n /**\r\n * Append the image content to slide container\r\n */\n\n\n appendImage() {\n if (!this.isAttached) {\n return;\n }\n\n if (this.instance.dispatch('contentAppendImage', {\n content: this\n }).defaultPrevented) {\n return;\n } // ensure that element exists and is not already appended\n\n\n if (this.slide && this.element && !this.element.parentNode) {\n this.slide.container.appendChild(this.element);\n }\n\n if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\n this.removePlaceholder();\n }\n }\n\n}\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {PhotoSwipeBase} pswp\r\n * @returns {Point}\r\n */\nfunction getViewportSize(options, pswp) {\n if (options.getViewportSizeFn) {\n const newViewportSize = options.getViewportSizeFn(options, pswp);\n\n if (newViewportSize) {\n return newViewportSize;\n }\n }\n\n return {\n x: document.documentElement.clientWidth,\n // TODO: height on mobile is very incosistent due to toolbar\n // find a way to improve this\n //\n // document.documentElement.clientHeight - doesn't seem to work well\n y: window.innerHeight\n };\n}\n/**\r\n * Parses padding option.\r\n * Supported formats:\r\n *\r\n * // Object\r\n * padding: {\r\n * top: 0,\r\n * bottom: 0,\r\n * left: 0,\r\n * right: 0\r\n * }\r\n *\r\n * // A function that returns the object\r\n * paddingFn: (viewportSize, itemData, index) => {\r\n * return {\r\n * top: 0,\r\n * bottom: 0,\r\n * left: 0,\r\n * right: 0\r\n * };\r\n * }\r\n *\r\n * // Legacy variant\r\n * paddingLeft: 0,\r\n * paddingRight: 0,\r\n * paddingTop: 0,\r\n * paddingBottom: 0,\r\n *\r\n * @param {'left' | 'top' | 'bottom' | 'right'} prop\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {Point} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index Slide index\r\n * @returns {number}\r\n */\n\nfunction parsePaddingOption(prop, options, viewportSize, itemData, index) {\n let paddingValue = 0;\n\n if (options.paddingFn) {\n paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\n } else if (options.padding) {\n paddingValue = options.padding[prop];\n } else {\n const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1); // @ts-expect-error\n\n if (options[legacyPropName]) {\n // @ts-expect-error\n paddingValue = options[legacyPropName];\n }\n }\n\n return Number(paddingValue) || 0;\n}\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {Point} viewportSize\r\n * @param {SlideData} itemData\r\n * @param {number} index\r\n * @returns {Point}\r\n */\n\nfunction getPanAreaSize(options, viewportSize, itemData, index) {\n return {\n x: viewportSize.x - parsePaddingOption('left', options, viewportSize, itemData, index) - parsePaddingOption('right', options, viewportSize, itemData, index),\n y: viewportSize.y - parsePaddingOption('top', options, viewportSize, itemData, index) - parsePaddingOption('bottom', options, viewportSize, itemData, index)\n };\n}\n\nconst MAX_IMAGE_WIDTH = 4000;\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/** @typedef {'fit' | 'fill' | number | ((zoomLevelObject: ZoomLevel) => number)} ZoomLevelOption */\n\n/**\r\n * Calculates zoom levels for specific slide.\r\n * Depends on viewport size and image size.\r\n */\n\nclass ZoomLevel {\n /**\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {SlideData} itemData Slide data\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipe} [pswp] PhotoSwipe instance, can be undefined if not initialized yet\r\n */\n constructor(options, itemData, index, pswp) {\n this.pswp = pswp;\n this.options = options;\n this.itemData = itemData;\n this.index = index;\n /** @type { Point | null } */\n\n this.panAreaSize = null;\n /** @type { Point | null } */\n\n this.elementSize = null;\n this.fit = 1;\n this.fill = 1;\n this.vFill = 1;\n this.initial = 1;\n this.secondary = 1;\n this.max = 1;\n this.min = 1;\n }\n /**\r\n * Calculate initial, secondary and maximum zoom level for the specified slide.\r\n *\r\n * It should be called when either image or viewport size changes.\r\n *\r\n * @param {number} maxWidth\r\n * @param {number} maxHeight\r\n * @param {Point} panAreaSize\r\n */\n\n\n update(maxWidth, maxHeight, panAreaSize) {\n /** @type {Point} */\n const elementSize = {\n x: maxWidth,\n y: maxHeight\n };\n this.elementSize = elementSize;\n this.panAreaSize = panAreaSize;\n const hRatio = panAreaSize.x / elementSize.x;\n const vRatio = panAreaSize.y / elementSize.y;\n this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\n this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio); // zoom.vFill defines zoom level of the image\n // when it has 100% of viewport vertical space (height)\n\n this.vFill = Math.min(1, vRatio);\n this.initial = this._getInitial();\n this.secondary = this._getSecondary();\n this.max = Math.max(this.initial, this.secondary, this._getMax());\n this.min = Math.min(this.fit, this.initial, this.secondary);\n\n if (this.pswp) {\n this.pswp.dispatch('zoomLevelsUpdate', {\n zoomLevels: this,\n slideData: this.itemData\n });\n }\n }\n /**\r\n * Parses user-defined zoom option.\r\n *\r\n * @private\r\n * @param {'initial' | 'secondary' | 'max'} optionPrefix Zoom level option prefix (initial, secondary, max)\r\n * @returns { number | undefined }\r\n */\n\n\n _parseZoomLevelOption(optionPrefix) {\n const optionName =\n /** @type {'initialZoomLevel' | 'secondaryZoomLevel' | 'maxZoomLevel'} */\n optionPrefix + 'ZoomLevel';\n const optionValue = this.options[optionName];\n\n if (!optionValue) {\n return;\n }\n\n if (typeof optionValue === 'function') {\n return optionValue(this);\n }\n\n if (optionValue === 'fill') {\n return this.fill;\n }\n\n if (optionValue === 'fit') {\n return this.fit;\n }\n\n return Number(optionValue);\n }\n /**\r\n * Get zoom level to which image will be zoomed after double-tap gesture,\r\n * or when user clicks on zoom icon,\r\n * or mouse-click on image itself.\r\n * If you return 1 image will be zoomed to its original size.\r\n *\r\n * @private\r\n * @return {number}\r\n */\n\n\n _getSecondary() {\n let currZoomLevel = this._parseZoomLevelOption('secondary');\n\n if (currZoomLevel) {\n return currZoomLevel;\n } // 3x of \"fit\" state, but not larger than original\n\n\n currZoomLevel = Math.min(1, this.fit * 3);\n\n if (this.elementSize && currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\n currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\n }\n\n return currZoomLevel;\n }\n /**\r\n * Get initial image zoom level.\r\n *\r\n * @private\r\n * @return {number}\r\n */\n\n\n _getInitial() {\n return this._parseZoomLevelOption('initial') || this.fit;\n }\n /**\r\n * Maximum zoom level when user zooms\r\n * via zoom/pinch gesture,\r\n * via cmd/ctrl-wheel or via trackpad.\r\n *\r\n * @private\r\n * @return {number}\r\n */\n\n\n _getMax() {\n // max zoom level is x4 from \"fit state\",\n // used for zoom gesture and ctrl/trackpad zoom\n return this._parseZoomLevelOption('max') || Math.max(1, this.fit * 4);\n }\n\n}\n\n/**\r\n * Lazy-load an image\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n * @param {number} index\r\n * @returns {Content} Image that is being decoded or false.\r\n */\n\nfunction lazyLoadData(itemData, instance, index) {\n const content = instance.createContentFromData(itemData, index);\n /** @type {ZoomLevel | undefined} */\n\n let zoomLevel;\n const {\n options\n } = instance; // We need to know dimensions of the image to preload it,\n // as it might use srcset, and we need to define sizes\n\n if (options) {\n zoomLevel = new ZoomLevel(options, itemData, -1);\n let viewportSize;\n\n if (instance.pswp) {\n viewportSize = instance.pswp.viewportSize;\n } else {\n viewportSize = getViewportSize(options, instance);\n }\n\n const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\n zoomLevel.update(content.width, content.height, panAreaSize);\n }\n\n content.lazyLoad();\n\n if (zoomLevel) {\n content.setDisplayedSize(Math.ceil(content.width * zoomLevel.initial), Math.ceil(content.height * zoomLevel.initial));\n }\n\n return content;\n}\n/**\r\n * Lazy-loads specific slide.\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * By default, it loads image based on viewport size and initial zoom level.\r\n *\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\r\n * @returns {Content | undefined}\r\n */\n\nfunction lazyLoadSlide(index, instance) {\n const itemData = instance.getItemData(index);\n\n if (instance.dispatch('lazyLoadSlide', {\n index,\n itemData\n }).defaultPrevented) {\n return;\n }\n\n return lazyLoadData(itemData, instance, index);\n}\n\n/** @typedef {import(\"../photoswipe.js\").default} PhotoSwipe */\n\n/** @typedef {import(\"../slide/slide.js\").SlideData} SlideData */\n\n/**\r\n * PhotoSwipe base class that can retrieve data about every slide.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\r\n */\n\nclass PhotoSwipeBase extends Eventable {\n /**\r\n * Get total number of slides\r\n *\r\n * @returns {number}\r\n */\n getNumItems() {\n var _this$options;\n\n let numItems = 0;\n const dataSource = (_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.dataSource;\n\n if (dataSource && 'length' in dataSource) {\n // may be an array or just object with length property\n numItems = dataSource.length;\n } else if (dataSource && 'gallery' in dataSource) {\n // query DOM elements\n if (!dataSource.items) {\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\n }\n\n if (dataSource.items) {\n numItems = dataSource.items.length;\n }\n } // legacy event, before filters were introduced\n\n\n const event = this.dispatch('numItems', {\n dataSource,\n numItems\n });\n return this.applyFilters('numItems', event.numItems, dataSource);\n }\n /**\r\n * @param {SlideData} slideData\r\n * @param {number} index\r\n * @returns {Content}\r\n */\n\n\n createContentFromData(slideData, index) {\n return new Content(slideData, this, index);\n }\n /**\r\n * Get item data by index.\r\n *\r\n * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\r\n * For example, it may contain properties like\r\n * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\r\n *\r\n * @param {number} index\r\n * @returns {SlideData}\r\n */\n\n\n getItemData(index) {\n var _this$options2;\n\n const dataSource = (_this$options2 = this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.dataSource;\n /** @type {SlideData | HTMLElement} */\n\n let dataSourceItem = {};\n\n if (Array.isArray(dataSource)) {\n // Datasource is an array of elements\n dataSourceItem = dataSource[index];\n } else if (dataSource && 'gallery' in dataSource) {\n // dataSource has gallery property,\n // thus it was created by Lightbox, based on\n // gallery and children options\n // query DOM elements\n if (!dataSource.items) {\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\n }\n\n dataSourceItem = dataSource.items[index];\n }\n\n let itemData = dataSourceItem;\n\n if (itemData instanceof Element) {\n itemData = this._domElementToItemData(itemData);\n } // Dispatching the itemData event,\n // it's a legacy verion before filters were introduced\n\n\n const event = this.dispatch('itemData', {\n itemData: itemData || {},\n index\n });\n return this.applyFilters('itemData', event.itemData, index);\n }\n /**\r\n * Get array of gallery DOM elements,\r\n * based on childSelector and gallery element.\r\n *\r\n * @param {HTMLElement} galleryElement\r\n * @returns {HTMLElement[]}\r\n */\n\n\n _getGalleryDOMElements(galleryElement) {\n var _this$options3, _this$options4;\n\n if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.children || (_this$options4 = this.options) !== null && _this$options4 !== void 0 && _this$options4.childSelector) {\n return getElementsFromOption(this.options.children, this.options.childSelector, galleryElement) || [];\n }\n\n return [galleryElement];\n }\n /**\r\n * Converts DOM element to item data object.\r\n *\r\n * @param {HTMLElement} element DOM element\r\n * @returns {SlideData}\r\n */\n\n\n _domElementToItemData(element) {\n /** @type {SlideData} */\n const itemData = {\n element\n };\n const linkEl =\n /** @type {HTMLAnchorElement} */\n element.tagName === 'A' ? element : element.querySelector('a');\n\n if (linkEl) {\n // src comes from data-pswp-src attribute,\n // if it's empty link href is used\n itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\n\n if (linkEl.dataset.pswpSrcset) {\n itemData.srcset = linkEl.dataset.pswpSrcset;\n }\n\n itemData.width = linkEl.dataset.pswpWidth ? parseInt(linkEl.dataset.pswpWidth, 10) : 0;\n itemData.height = linkEl.dataset.pswpHeight ? parseInt(linkEl.dataset.pswpHeight, 10) : 0; // support legacy w & h properties\n\n itemData.w = itemData.width;\n itemData.h = itemData.height;\n\n if (linkEl.dataset.pswpType) {\n itemData.type = linkEl.dataset.pswpType;\n }\n\n const thumbnailEl = element.querySelector('img');\n\n if (thumbnailEl) {\n var _thumbnailEl$getAttri;\n\n // msrc is URL to placeholder image that's displayed before large image is loaded\n // by default it's displayed only for the first slide\n itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\n itemData.alt = (_thumbnailEl$getAttri = thumbnailEl.getAttribute('alt')) !== null && _thumbnailEl$getAttri !== void 0 ? _thumbnailEl$getAttri : '';\n }\n\n if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\n itemData.thumbCropped = true;\n }\n }\n\n return this.applyFilters('domItemData', itemData, element, linkEl);\n }\n /**\r\n * Lazy-load by slide data\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index\r\n * @returns {Content} Image that is being decoded or false.\r\n */\n\n\n lazyLoadData(itemData, index) {\n return lazyLoadData(itemData, this, index);\n }\n\n}\n\n/**\r\n * @template T\r\n * @typedef {import('../types.js').Type} Type\r\n */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/content.js').default} Content */\n\n/** @typedef {import('../core/eventable.js').PhotoSwipeEventsMap} PhotoSwipeEventsMap */\n\n/** @typedef {import('../core/eventable.js').PhotoSwipeFiltersMap} PhotoSwipeFiltersMap */\n\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {import('../core/eventable.js').EventCallback} EventCallback\r\n */\n\n/**\r\n * PhotoSwipe Lightbox\r\n *\r\n * - If user has unsupported browser it falls back to default browser action (just opens URL)\r\n * - Binds click event to links that should open PhotoSwipe\r\n * - parses DOM strcture for PhotoSwipe (retrieves large image URLs and sizes)\r\n * - Initializes PhotoSwipe\r\n *\r\n *\r\n * Loader options use the same object as PhotoSwipe, and supports such options:\r\n *\r\n * gallery - Element | Element[] | NodeList | string selector for the gallery element\r\n * children - Element | Element[] | NodeList | string selector for the gallery children\r\n *\r\n */\n\nclass PhotoSwipeLightbox extends PhotoSwipeBase {\n /**\r\n * @param {PhotoSwipeOptions} [options]\r\n */\n constructor(options) {\n super();\n /** @type {PhotoSwipeOptions} */\n\n this.options = options || {};\n this._uid = 0;\n this.shouldOpen = false;\n /**\r\n * @private\r\n * @type {Content | undefined}\r\n */\n\n this._preloadedContent = undefined;\n this.onThumbnailsClick = this.onThumbnailsClick.bind(this);\n }\n /**\r\n * Initialize lightbox, should be called only once.\r\n * It's not included in the main constructor, so you may bind events before it.\r\n */\n\n\n init() {\n // Bind click events to each gallery\n getElementsFromOption(this.options.gallery, this.options.gallerySelector).forEach(galleryElement => {\n galleryElement.addEventListener('click', this.onThumbnailsClick, false);\n });\n }\n /**\r\n * @param {MouseEvent} e\r\n */\n\n\n onThumbnailsClick(e) {\n // Exit and allow default browser action if:\n if (specialKeyUsed(e) // ... if clicked with a special key (ctrl/cmd...)\n || window.pswp) {\n // ... if PhotoSwipe is already open\n return;\n } // If both clientX and clientY are 0 or not defined,\n // the event is likely triggered by keyboard,\n // so we do not pass the initialPoint\n //\n // Note that some screen readers emulate the mouse position,\n // so it's not the ideal way to detect them.\n //\n\n /** @type {Point | null} */\n\n\n let initialPoint = {\n x: e.clientX,\n y: e.clientY\n };\n\n if (!initialPoint.x && !initialPoint.y) {\n initialPoint = null;\n }\n\n let clickedIndex = this.getClickedIndex(e);\n clickedIndex = this.applyFilters('clickedIndex', clickedIndex, e, this);\n /** @type {DataSource} */\n\n const dataSource = {\n gallery:\n /** @type {HTMLElement} */\n e.currentTarget\n };\n\n if (clickedIndex >= 0) {\n e.preventDefault();\n this.loadAndOpen(clickedIndex, dataSource, initialPoint);\n }\n }\n /**\r\n * Get index of gallery item that was clicked.\r\n *\r\n * @param {MouseEvent} e click event\r\n * @returns {number}\r\n */\n\n\n getClickedIndex(e) {\n // legacy option\n if (this.options.getClickedIndexFn) {\n return this.options.getClickedIndexFn.call(this, e);\n }\n\n const clickedTarget =\n /** @type {HTMLElement} */\n e.target;\n const childElements = getElementsFromOption(this.options.children, this.options.childSelector,\n /** @type {HTMLElement} */\n e.currentTarget);\n const clickedChildIndex = childElements.findIndex(child => child === clickedTarget || child.contains(clickedTarget));\n\n if (clickedChildIndex !== -1) {\n return clickedChildIndex;\n } else if (this.options.children || this.options.childSelector) {\n // click wasn't on a child element\n return -1;\n } // There is only one item (which is the gallery)\n\n\n return 0;\n }\n /**\r\n * Load and open PhotoSwipe\r\n *\r\n * @param {number} index\r\n * @param {DataSource} [dataSource]\r\n * @param {Point | null} [initialPoint]\r\n * @returns {boolean}\r\n */\n\n\n loadAndOpen(index, dataSource, initialPoint) {\n // Check if the gallery is already open\n if (window.pswp || !this.options) {\n return false;\n } // Use the first gallery element if dataSource is not provided\n\n\n if (!dataSource && this.options.gallery && this.options.children) {\n const galleryElements = getElementsFromOption(this.options.gallery);\n\n if (galleryElements[0]) {\n dataSource = {\n gallery: galleryElements[0]\n };\n }\n } // set initial index\n\n\n this.options.index = index; // define options for PhotoSwipe constructor\n\n this.options.initialPointerPos = initialPoint;\n this.shouldOpen = true;\n this.preload(index, dataSource);\n return true;\n }\n /**\r\n * Load the main module and the slide content by index\r\n *\r\n * @param {number} index\r\n * @param {DataSource} [dataSource]\r\n */\n\n\n preload(index, dataSource) {\n const {\n options\n } = this;\n\n if (dataSource) {\n options.dataSource = dataSource;\n } // Add the main module\n\n /** @type {Promise>[]} */\n\n\n const promiseArray = [];\n const pswpModuleType = typeof options.pswpModule;\n\n if (isPswpClass(options.pswpModule)) {\n promiseArray.push(Promise.resolve(\n /** @type {Type} */\n options.pswpModule));\n } else if (pswpModuleType === 'string') {\n throw new Error('pswpModule as string is no longer supported');\n } else if (pswpModuleType === 'function') {\n promiseArray.push(\n /** @type {() => Promise>} */\n options.pswpModule());\n } else {\n throw new Error('pswpModule is not valid');\n } // Add custom-defined promise, if any\n\n\n if (typeof options.openPromise === 'function') {\n // allow developers to perform some task before opening\n promiseArray.push(options.openPromise());\n }\n\n if (options.preloadFirstSlide !== false && index >= 0) {\n this._preloadedContent = lazyLoadSlide(index, this);\n } // Wait till all promises resolve and open PhotoSwipe\n\n\n const uid = ++this._uid;\n Promise.all(promiseArray).then(iterableModules => {\n if (this.shouldOpen) {\n const mainModule = iterableModules[0];\n\n this._openPhotoswipe(mainModule, uid);\n }\n });\n }\n /**\r\n * @private\r\n * @param {Type | { default: Type }} module\r\n * @param {number} uid\r\n */\n\n\n _openPhotoswipe(module, uid) {\n // Cancel opening if UID doesn't match the current one\n // (if user clicked on another gallery item before current was loaded).\n //\n // Or if shouldOpen flag is set to false\n // (developer may modify it via public API)\n if (uid !== this._uid && this.shouldOpen) {\n return;\n }\n\n this.shouldOpen = false; // PhotoSwipe is already open\n\n if (window.pswp) {\n return;\n }\n /**\r\n * Pass data to PhotoSwipe and open init\r\n *\r\n * @type {PhotoSwipe}\r\n */\n\n\n const pswp = typeof module === 'object' ? new module.default(this.options) // eslint-disable-line\n : new module(this.options); // eslint-disable-line\n\n this.pswp = pswp;\n window.pswp = pswp; // map listeners from Lightbox to PhotoSwipe Core\n\n /** @type {(keyof PhotoSwipeEventsMap)[]} */\n\n Object.keys(this._listeners).forEach(name => {\n var _this$_listeners$name;\n\n (_this$_listeners$name = this._listeners[name]) === null || _this$_listeners$name === void 0 || _this$_listeners$name.forEach(fn => {\n pswp.on(name,\n /** @type {EventCallback} */\n fn);\n });\n }); // same with filters\n\n /** @type {(keyof PhotoSwipeFiltersMap)[]} */\n\n Object.keys(this._filters).forEach(name => {\n var _this$_filters$name;\n\n (_this$_filters$name = this._filters[name]) === null || _this$_filters$name === void 0 || _this$_filters$name.forEach(filter => {\n pswp.addFilter(name, filter.fn, filter.priority);\n });\n });\n\n if (this._preloadedContent) {\n pswp.contentLoader.addToCache(this._preloadedContent);\n this._preloadedContent = undefined;\n }\n\n pswp.on('destroy', () => {\n // clean up public variables\n this.pswp = undefined;\n delete window.pswp;\n });\n pswp.init();\n }\n /**\r\n * Unbinds all events, closes PhotoSwipe if it's open.\r\n */\n\n\n destroy() {\n var _this$pswp;\n\n (_this$pswp = this.pswp) === null || _this$pswp === void 0 || _this$pswp.destroy();\n this.shouldOpen = false;\n this._listeners = {};\n getElementsFromOption(this.options.gallery, this.options.gallerySelector).forEach(galleryElement => {\n galleryElement.removeEventListener('click', this.onThumbnailsClick, false);\n });\n }\n\n}\n\nexport { PhotoSwipeLightbox as default };\n//# sourceMappingURL=photoswipe-lightbox.esm.js.map\n","import Swiper from \"swiper\"\nimport { Navigation } from \"swiper/modules\"\nimport \"swiper/css\"\nimport \"swiper/css/navigation\"\nimport PhotoSwipe from \"photoswipe\"\nimport PhotoSwipeLightbox from \"photoswipe/lightbox\"\nimport \"photoswipe/style.css\"\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n let moreViews = document.querySelectorAll(\".more-views li\")\n moreViews.forEach(function (view) {\n view.addEventListener(\"click\", function () {\n document\n .querySelector(\"#media-image\")\n .setAttribute(\"src\", this.getAttribute(\"data-src\"))\n document.querySelector(\".more-views .active\").classList.remove(\"active\")\n this.classList.add(\"active\")\n })\n })\n})\n\ndocument\n .getElementById(\"media-image\")\n .addEventListener(\"touchstart\", handleTouchStart, { passive: true })\ndocument\n .getElementById(\"media-image\")\n .addEventListener(\"touchmove\", handleTouchMove, { passive: true })\n\nlet xDown = null\nlet yDown = null\n\nfunction handleTouchStart(evt) {\n xDown = evt.touches[0].clientX\n yDown = evt.touches[0].clientY\n}\n\nfunction handleTouchMove(evt) {\n if (!xDown || !yDown) {\n return\n }\n\n let xUp = evt.touches[0].clientX\n let yUp = evt.touches[0].clientY\n\n let xDiff = xDown - xUp\n let yDiff = yDown - yUp\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\n if (xDiff > 0) {\n imageRight()\n } else {\n imageLeft()\n }\n }\n\n xDown = null\n yDown = null\n}\n\nfunction imageRight() {\n let thumbnails = document.querySelector(\".more-views\")\n let currentThumb = thumbnails.querySelector(\"li.active\")\n\n if (thumbnails.querySelector(\"li:last-child\") === currentThumb) return\n\n let nextThumb = currentThumb.nextElementSibling\n let nextImage = nextThumb.getAttribute(\"data-src\")\n\n document.querySelector(\"#media-image\").setAttribute(\"src\", nextImage)\n document.querySelector(\".more-views .active\").classList.remove(\"active\")\n nextThumb.classList.add(\"active\")\n}\n\nfunction imageLeft() {\n let thumbnails = document.querySelector(\".more-views\")\n let currentThumb = thumbnails.querySelector(\"li.active\")\n\n if (thumbnails.querySelector(\"li:first-child\") === currentThumb) return\n\n let prevThumb = currentThumb.previousElementSibling\n let prevImage = prevThumb.getAttribute(\"data-src\")\n\n document.querySelector(\"#media-image\").setAttribute(\"src\", prevImage)\n document.querySelector(\".more-views .active\").classList.remove(\"active\")\n prevThumb.classList.add(\"active\")\n}\n\nSwiper.use([Navigation])\n\nconst swiper = new Swiper(\".swiper\", {\n slidesPerView: 1,\n spaceBetween: 10,\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\",\n },\n breakpoints: {\n 768: {\n slidesPerView: 2,\n },\n 1024: {\n slidesPerView: 3,\n },\n },\n})\n\nfunction isPhonePortrait() {\n return window.matchMedia(\"(max-width: 600px) and (orientation: portrait)\")\n .matches\n}\n\nconst lightbox = new PhotoSwipeLightbox({\n gallery: \".swiper-slide\",\n children: \"a\",\n initialZoomLevel: (zoomLevelObject) => {\n if (isPhonePortrait()) {\n return zoomLevelObject.vFill\n } else {\n return zoomLevelObject.fit\n }\n },\n secondaryZoomLevel: (zoomLevelObject) => {\n if (isPhonePortrait()) {\n return zoomLevelObject.fit\n } else {\n return 1\n }\n },\n pswpModule: () => PhotoSwipe,\n})\nlightbox.init()\n"],"names":["isObject","obj","extend","target","src","key","ssrDocument","getDocument","doc","ssrWindow","callback","id","getWindow","win","classesToTokens","classes","c","deleteProps","object","nextTick","delay","now","getComputedStyle","el","window","style","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","a","o","isNode","node","to","noExtend","i","nextSource","keysArray","nextIndex","len","nextKey","desc","setCSSProperty","varName","varValue","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","startTime","time","duration","dir","isOutOfBound","current","animate","progress","easeProgress","currentPosition","elementChildren","element","selector","children","elementIsChildOf","parent","isChild","showWarning","text","createElement","tag","elementPrevAll","prevEls","prev","elementNextAll","nextEls","next","elementStyle","prop","elementIndex","child","elementParents","parents","elementOuterSize","size","includeMargins","makeElementsArray","support","calcSupport","document","getSupport","deviceCached","calcDevice","_temp","userAgent","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","windows","macos","iPadScreens","getDevice","overrides","browser","calcBrowser","needPerspectiveFix","isSafari","major","minor","num","isWebView","isSafariBrowser","need3dFix","getBrowser","Resize","on","emit","observer","animationFrame","resizeHandler","createObserver","entries","width","height","newWidth","newHeight","_ref2","contentBoxSize","contentRect","removeObserver","orientationChangeHandler","Observer","extendParams","observers","attach","options","ObserverFunc","mutations","observerUpdate","init","containerParents","destroy","eventsEmitter","events","handler","priority","self","method","event","onceHandler","_len","args","_key","index","eventHandler","data","context","_len2","_key2","updateSize","updateSlides","getDirectionPropertyValue","label","params","wrapperEl","slidesEl","swiperSize","rtl","wrongRTL","isVirtual","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slideEl","gridEnabled","slideSize","shouldResetSlideSize","slide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","marginLeft","marginRight","boxSizing","clientWidth","offsetWidth","newSlidesGrid","slidesGridItem","groups","groupSize","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","speed","activeSlides","getSlideByIndex","updateSlidesOffset","minusOffset","toggleSlideClasses$1","condition","className","updateSlidesProgress","translate","offsetCenter","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","updateProgress","multiplier","translatesDiff","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","toggleSlideClasses","updateSlidesClasses","activeIndex","getFilteredSlide","activeSlide","prevSlide","nextSlide","processLazyPreloader","imageEl","slideSelector","lazyEl","unlazy","preload","amount","slidesPerView","activeColumn","preloadColumns","slideIndexLastInView","realIndex","getActiveIndexByTranslate","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","skip","firstSlideInColumn","activeSlideIndex","updateClickedSlide","path","pathEl","slideFound","update","getSwiperTranslate","currentTranslate","setTranslate","byController","x","y","z","newProgress","minTranslate","maxTranslate","translateTo","runCallbacks","translateBounds","internal","newTranslate","isH","e","setTransition","transitionEmit","direction","step","transitionStart","transitionEnd","transition","slideTo","initial","enabled","normalizedTranslate","normalizedGrid","normalizedGridNext","t","slideToLoop","newIndex","targetSlideIndex","cols","centeredSlides","needLoopFix","slideNext","animating","perGroup","increment","slidePrev","rtlTranslate","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slideToClickedSlide","slideToIndex","loopCreate","slideRealIndex","initSlides","slidesPerGroup","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slidesToAdd","loopFix","byMousewheel","allowSlidePrev","allowSlideNext","loopedSlides","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","currentSlideTranslate","diff","shift","loopParams","loopDestroy","newSlidesOrder","loop","setGrabCursor","moving","unsetGrabCursor","grabCursor","closestElement","base","__closestFrom","found","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","onTouchStart","touches","targetEl","swipingClassHasValue","eventPath","noSwipingSelector","isTargetShadow","startY","preventDefault","shouldPreventDefault","onTouchMove","targetTouch","pageX","pageY","diffX","diffY","touchAngle","touchesDiff","prevTouchesDirection","isLoop","allowLoopFix","evt","loopFixed","disableParentSwiper","resistanceRatio","onTouchEnd","touchEndTime","timeDiff","pathTree","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","onResize","isVirtualLoop","onClick","onScroll","onLoad","onDocumentTouchStart","capture","domMethod","swiperMethod","attachEvents","detachEvents","events$1","isGridEnabled","setBreakpoint","initialized","breakpoints","breakpoint","breakpointParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","wasLoop","isEnabled","hasLoop","getBreakpoint","containerEl","currentHeight","points","point","minRatio","b","value","prepareClasses","prefix","resultClasses","item","classNames","addClasses","suffixes","removeClasses","checkOverflow","wasLocked","slidesOffsetBefore","lastSlideRightEdge","checkOverflow$1","defaults","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","prototypes","extendedDefaults","Swiper","swipers","newParams","mod","swiperParams","eventName","property","min","cls","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","getWrapperSelector","lazyElements","deleteInstance","cleanStyles","newDefaults","modules","module","m","prototypeGroup","protoMethod","createElementIfNotDefined","originalParams","checkProps","Navigation","getEl","res","toggleEl","disabled","subEl","nextEl","prevEl","onPrevClick","onNextClick","initButton","destroyButton","disable","_s","targetIsButton","isHidden","enable","tagName","appendToEl","toTransformString","scale","propValue","setWidthHeight","w","h","LOAD_STATE","specialKeyUsed","getElementsFromOption","option","legacySelector","elements","isPswpClass","fn","PhotoSwipeEvent","type","details","Eventable","name","_this$_filters$name","_this$_filters$name2","_this$pswp","f1","f2","filter","_this$_filters$name3","_this$_listeners$name","_this$pswp2","_this$pswp3","listener","_this$_listeners$name2","Placeholder","imageSrc","container","imgEl","_this$element","Content","itemData","instance","isLazy","reload","placeholderEl","placeholderSrc","_this$data$src","_this$data$alt","imageElement","isInitialSizeUpdate","image","sizesWidth","_this$instance$option","_this$instance$option2","errorMsgEl","supportsDecode","getViewportSize","pswp","newViewportSize","parsePaddingOption","viewportSize","paddingValue","legacyPropName","getPanAreaSize","MAX_IMAGE_WIDTH","ZoomLevel","maxWidth","maxHeight","panAreaSize","elementSize","hRatio","vRatio","optionPrefix","optionName","optionValue","currZoomLevel","lazyLoadData","content","zoomLevel","lazyLoadSlide","PhotoSwipeBase","_this$options","numItems","dataSource","slideData","_this$options2","dataSourceItem","galleryElement","_this$options3","_this$options4","linkEl","thumbnailEl","_thumbnailEl$getAttri","PhotoSwipeLightbox","initialPoint","clickedIndex","clickedTarget","clickedChildIndex","galleryElements","promiseArray","pswpModuleType","uid","iterableModules","mainModule","handleTouchStart","handleTouchMove","xDown","yDown","xUp","yUp","xDiff","yDiff","imageRight","imageLeft","thumbnails","currentThumb","nextThumb","nextImage","prevThumb","prevImage","isPhonePortrait","lightbox","zoomLevelObject","PhotoSwipe"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}