{"version":3,"file":"scripts.min.js","mappings":"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","sources":["webpack://app-swiper/./node_modules/ssr-window/ssr-window.esm.js","webpack://app-swiper/./node_modules/dom7/dom7.esm.js","webpack://app-swiper/./node_modules/swiper/shared/dom.js","webpack://app-swiper/./node_modules/swiper/shared/utils.js","webpack://app-swiper/./node_modules/swiper/shared/get-support.js","webpack://app-swiper/./node_modules/swiper/shared/get-device.js","webpack://app-swiper/./node_modules/swiper/shared/get-browser.js","webpack://app-swiper/./node_modules/swiper/core/events-emitter.js","webpack://app-swiper/./node_modules/swiper/core/update/index.js","webpack://app-swiper/./node_modules/swiper/core/update/updateSize.js","webpack://app-swiper/./node_modules/swiper/core/update/updateSlides.js","webpack://app-swiper/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://app-swiper/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://app-swiper/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://app-swiper/./node_modules/swiper/core/update/updateProgress.js","webpack://app-swiper/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://app-swiper/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://app-swiper/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://app-swiper/./node_modules/swiper/core/translate/index.js","webpack://app-swiper/./node_modules/swiper/core/translate/getTranslate.js","webpack://app-swiper/./node_modules/swiper/core/translate/setTranslate.js","webpack://app-swiper/./node_modules/swiper/core/translate/minTranslate.js","webpack://app-swiper/./node_modules/swiper/core/translate/maxTranslate.js","webpack://app-swiper/./node_modules/swiper/core/translate/translateTo.js","webpack://app-swiper/./node_modules/swiper/core/transition/transitionEmit.js","webpack://app-swiper/./node_modules/swiper/core/slide/index.js","webpack://app-swiper/./node_modules/swiper/core/slide/slideTo.js","webpack://app-swiper/./node_modules/swiper/core/slide/slideToLoop.js","webpack://app-swiper/./node_modules/swiper/core/slide/slideNext.js","webpack://app-swiper/./node_modules/swiper/core/slide/slidePrev.js","webpack://app-swiper/./node_modules/swiper/core/slide/slideReset.js","webpack://app-swiper/./node_modules/swiper/core/slide/slideToClosest.js","webpack://app-swiper/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://app-swiper/./node_modules/swiper/core/loop/index.js","webpack://app-swiper/./node_modules/swiper/core/loop/loopCreate.js","webpack://app-swiper/./node_modules/swiper/core/loop/loopFix.js","webpack://app-swiper/./node_modules/swiper/core/loop/loopDestroy.js","webpack://app-swiper/./node_modules/swiper/core/events/onTouchStart.js","webpack://app-swiper/./node_modules/swiper/core/events/onTouchMove.js","webpack://app-swiper/./node_modules/swiper/core/events/onTouchEnd.js","webpack://app-swiper/./node_modules/swiper/core/events/onResize.js","webpack://app-swiper/./node_modules/swiper/core/events/onClick.js","webpack://app-swiper/./node_modules/swiper/core/events/onScroll.js","webpack://app-swiper/./node_modules/swiper/core/events/index.js","webpack://app-swiper/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://app-swiper/./node_modules/swiper/core/breakpoints/index.js","webpack://app-swiper/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://app-swiper/./node_modules/swiper/core/classes/index.js","webpack://app-swiper/./node_modules/swiper/core/classes/addClasses.js","webpack://app-swiper/./node_modules/swiper/core/classes/removeClasses.js","webpack://app-swiper/./node_modules/swiper/core/check-overflow/index.js","webpack://app-swiper/./node_modules/swiper/core/defaults.js","webpack://app-swiper/./node_modules/swiper/core/moduleExtendParams.js","webpack://app-swiper/./node_modules/swiper/core/core.js","webpack://app-swiper/./node_modules/swiper/core/transition/index.js","webpack://app-swiper/./node_modules/swiper/core/transition/setTransition.js","webpack://app-swiper/./node_modules/swiper/core/transition/transitionStart.js","webpack://app-swiper/./node_modules/swiper/core/transition/transitionEnd.js","webpack://app-swiper/./node_modules/swiper/core/grab-cursor/index.js","webpack://app-swiper/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://app-swiper/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://app-swiper/./node_modules/swiper/core/images/index.js","webpack://app-swiper/./node_modules/swiper/core/images/loadImage.js","webpack://app-swiper/./node_modules/swiper/core/images/preloadImages.js","webpack://app-swiper/./node_modules/swiper/core/modules/resize/resize.js","webpack://app-swiper/./node_modules/swiper/core/modules/observer/observer.js","webpack://app-swiper/./node_modules/swiper/modules/virtual/virtual.js","webpack://app-swiper/./node_modules/swiper/modules/keyboard/keyboard.js","webpack://app-swiper/./node_modules/swiper/modules/mousewheel/mousewheel.js","webpack://app-swiper/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://app-swiper/./node_modules/swiper/modules/navigation/navigation.js","webpack://app-swiper/./node_modules/swiper/shared/classes-to-selector.js","webpack://app-swiper/./node_modules/swiper/modules/pagination/pagination.js","webpack://app-swiper/./node_modules/swiper/modules/scrollbar/scrollbar.js","webpack://app-swiper/./node_modules/swiper/modules/parallax/parallax.js","webpack://app-swiper/./node_modules/swiper/modules/zoom/zoom.js","webpack://app-swiper/./node_modules/swiper/modules/lazy/lazy.js","webpack://app-swiper/./node_modules/swiper/modules/controller/controller.js","webpack://app-swiper/./node_modules/swiper/modules/a11y/a11y.js","webpack://app-swiper/./node_modules/swiper/modules/history/history.js","webpack://app-swiper/./node_modules/swiper/modules/hash-navigation/hash-navigation.js","webpack://app-swiper/./node_modules/swiper/modules/autoplay/autoplay.js","webpack://app-swiper/./node_modules/swiper/modules/thumbs/thumbs.js","webpack://app-swiper/./node_modules/swiper/modules/free-mode/free-mode.js","webpack://app-swiper/./node_modules/swiper/modules/grid/grid.js","webpack://app-swiper/./node_modules/swiper/modules/manipulation/methods/appendSlide.js","webpack://app-swiper/./node_modules/swiper/modules/manipulation/methods/prependSlide.js","webpack://app-swiper/./node_modules/swiper/modules/manipulation/methods/addSlide.js","webpack://app-swiper/./node_modules/swiper/modules/manipulation/methods/removeSlide.js","webpack://app-swiper/./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js","webpack://app-swiper/./node_modules/swiper/modules/manipulation/manipulation.js","webpack://app-swiper/./node_modules/swiper/shared/effect-init.js","webpack://app-swiper/./node_modules/swiper/shared/effect-target.js","webpack://app-swiper/./node_modules/swiper/shared/effect-virtual-transition-end.js","webpack://app-swiper/./node_modules/swiper/modules/effect-fade/effect-fade.js","webpack://app-swiper/./node_modules/swiper/modules/effect-cube/effect-cube.js","webpack://app-swiper/./node_modules/swiper/shared/create-shadow.js","webpack://app-swiper/./node_modules/swiper/modules/effect-flip/effect-flip.js","webpack://app-swiper/./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js","webpack://app-swiper/./node_modules/swiper/modules/effect-creative/effect-creative.js","webpack://app-swiper/./node_modules/swiper/modules/effect-cards/effect-cards.js","webpack://app-swiper/webpack/bootstrap","webpack://app-swiper/webpack/runtime/define property getters","webpack://app-swiper/webpack/runtime/hasOwnProperty shorthand","webpack://app-swiper/webpack/runtime/make namespace object","webpack://app-swiper/./src/ts/scripts.ts"],"sourcesContent":["/**\n * SSR Window 4.0.0\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: August 25, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\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}\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 { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.0\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: August 25, 2021\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n super(...(items || []));\n makeReactive(this);\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\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 }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\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\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\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\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\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\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\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\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\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\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\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\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\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\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\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\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'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\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 } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\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\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\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\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\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\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\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\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\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};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('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}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\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\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\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 = $wrapperEl.children(`.${swiper.params.slideClass}`);\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\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\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\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\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\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(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\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\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\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\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\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 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\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.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\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n}","export default function 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\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(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 } // Find new height from highest slide in view\n\n\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 } // Update Height\n\n\n if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl\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; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\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 } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\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\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\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\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('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\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\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; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\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\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\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\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\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[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\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\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\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\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\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\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 } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\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\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\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\n if (!swiper.animating) {\n swiper.animating = true;\n\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[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\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\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\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\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\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\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\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\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\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}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\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 = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $wrapperEl.append(blankNode);\n }\n\n slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\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 return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\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\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function 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 let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n // isMoved = true;\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\n return;\n }\n\n if (data.isTouchEvent && 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\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\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\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\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\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\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\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\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\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 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 swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function 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\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\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\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\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\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\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 wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\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\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\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\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function 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}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\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 }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\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\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\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 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 // 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: 0,\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 // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\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 // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\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\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\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\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\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 }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\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\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\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\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\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 // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\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: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\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'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\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\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\n getSlideClasses(slideEl) {\n const swiper = this;\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(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\n slidesPerViewDynamic(view = 'current', exact = false) {\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\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\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\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\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\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\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(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\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\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'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\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]);\nexport default Swiper;","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\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}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\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\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\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}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\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 (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\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: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import $ from '../../shared/dom.js';\nimport { setCSSProperty } from '../../shared/utils.js';\nexport default function Virtual({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n\n const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`
${slide}
`);\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n swiper.updateActiveIndex();\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n\n swiper.updateProgress();\n return;\n }\n\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n\n return slidesToRender;\n }()\n });\n\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n }\n\n return;\n }\n\n const prependIndexes = [];\n const appendIndexes = [];\n\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n\n appendIndexes.forEach(index => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort((a, b) => b - a).forEach(index => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n\n update(true);\n }\n\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n }\n\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n\n function removeAllSlides() {\n swiper.virtual.slides = [];\n\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n update();\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n}","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now, nextTick } from '../../shared/utils.js';\nexport default function Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n // Legacy\n\n if ('detail' in e) {\n sY = e.detail;\n }\n\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n } // side scrolling on FF with DOMMouseScroll\n\n\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n } // Fall-back if spin cannot be determined\n\n\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n } // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n\n\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n } // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n\n\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n } // If you got here is because an animation has been triggered so store the current time\n\n\n lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n return false;\n }\n\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n\n return false;\n }\n\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n if (params.invert) delta = -delta; // Get the scroll positions\n\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n }; // Keep the most recent events\n\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n } // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n\n\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n } // Emit event\n\n\n if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\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 }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning);\n toggleEl($nextEl, swiper.isEnd);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n }\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 const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\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\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - swiper.previousIndex;\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = current - dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(params.modifierClass + swiper.params.direction);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(params.modifierClass + swiper.params.direction);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag'\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`
`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","import $ from '../../shared/dom.js';\nexport default function Parallax({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = (duration = swiper.params.speed) => {\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n } // Define if we need image drag\n\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY; // Define if we need image drag\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function Lazy({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n });\n swiper.lazy = {};\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate = true) {\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images.push($slideEl[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(imageEl => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n\n if ($pictureEl.length) {\n $pictureEl.children('source').each(sourceEl => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const {\n $wrapperEl,\n params: swiperParams,\n slides,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n let slidesPerView = swiperParams.slidesPerView;\n\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n return true;\n }\n } else if (slides[index]) return true;\n\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n } // Prev Slides\n\n\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const {\n rtlTranslate: rtl\n } = swiper;\n let inView = false;\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const {\n lazy,\n cssMode,\n watchSlidesProgress,\n touchReleaseOnEdges,\n resistanceRatio\n } = swiper.params;\n\n if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n load();\n }\n });\n Object.assign(swiper.lazy, {\n load,\n loadInSlide\n });\n}","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick } from '../../shared/utils.js';\nexport default function Controller({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\n }\n }\n\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group'\n }\n });\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n\n if (hasPagination()) {\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n });\n }\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n function init() {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n addElRole($(swiper.slides), params.slideRole);\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n }); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasPagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n }\n }\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasPagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n }\n }\n\n on('beforeInit', () => {\n liveRegion = $(``);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n updateNavigation();\n });\n on('toEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('fromEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","import { getWindow } from 'ssr-window';\nexport default function History({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides'\n }\n });\n let initialized = false;\n let paths = {};\n\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n\n const currentState = window.history.state;\n\n if (currentState && currentState.value === value) {\n return;\n }\n\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, swiper.paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n\n const destroy = () => {\n const window = getWindow();\n\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function HashNavigation({\n swiper,\n extendParams,\n emit,\n on\n}) {\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false\n }\n });\n\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n\n if (hash) {\n const speed = 0;\n\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit\n}) {\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n}","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n } // Activate thumbs\n\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n if (!swiper.thumbs.swiper) return;\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n\n if (swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { now } from '../../shared/utils.js';\nexport default function freeMode({\n swiper,\n extendParams,\n emit,\n once\n}) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper; // Velocity\n\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n\n function onTouchEnd({\n currentPos\n }) {\n const {\n params,\n $wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper; // Time diff\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n } // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n } // Fix duration\n\n\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchMove,\n onTouchEnd\n }\n });\n}","export default function Grid({\n swiper,\n extendParams\n}) {\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup,\n spaceBetween\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid; // Set slides order\n\n let newSlideOrderIndex;\n let column;\n let row;\n\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n\n slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n spaceBetween,\n centeredSlides,\n roundLengths\n } = swiper.params;\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`\n });\n\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n}","export default function appendSlide(slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n}","export default function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n let newActiveIndex = activeIndex + 1;\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n swiper.slideTo(newActiveIndex, 0, false);\n}","export default function addSlide(index, slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n const baseLength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","export default function removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","export default function removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n\n swiper.removeSlide(slidesIndexes);\n}","import appendSlide from './methods/appendSlide.js';\nimport prependSlide from './methods/prependSlide.js';\nimport addSlide from './methods/addSlide.js';\nimport removeSlide from './methods/removeSlide.js';\nimport removeAllSlides from './methods/removeAllSlides.js';\nexport default function Manipulation({\n swiper\n}) {\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n}","export default function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n}","export default function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n}","export default function effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides\n}) {\n const {\n slides,\n activeIndex,\n $wrapperEl\n } = swiper;\n\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n }\n\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n}","import effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nexport default function EffectFade({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.css({\n opacity: slideOpacity\n }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import $ from '../../shared/dom.js';\nimport effectInit from '../../shared/effect-init.js';\nexport default function EffectCube({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $wrapperEl.append($cubeShadowEl);\n }\n\n $cubeShadowEl.css({\n height: `${swiperWidth}px`\n });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $el.append($cubeShadowEl);\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n\n $slideEl.transform(transform);\n\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = $(`
`);\n $slideEl.append(shadowBefore);\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = $(`
`);\n $slideEl.append(shadowAfter);\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n }\n }\n\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n };\n\n const setTransition = duration => {\n const {\n $el,\n slides\n } = swiper;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n}","import $ from './dom.js';\nexport default function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`
`);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nexport default function EffectFlip({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nexport default function EffectCoverflow({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nexport default function EffectCreative({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n } // set translate\n\n\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n }); // set rotates\n\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = progress < 0 ? `scale(${1 + (1 - data.scale) * progress * multiplier})` : `scale(${1 - (1 - data.scale) * progress * multiplier})`;\n const opacityString = progress < 0 ? 1 + (1 - data.opacity) * progress * multiplier : 1 - (1 - data.opacity) * progress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows\n\n if (custom && data.shadow || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({\n opacity: opacityString\n });\n\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nexport default function EffectCards({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides,\n activeIndex\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -2 * progress;\n let tXAdd = 8 - Math.abs(progress) * 0.75;\n const isSwipeToNext = (i === activeIndex || i === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (i === activeIndex || i === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${rotate}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Swiper, { Navigation, Pagination, Parallax, EffectCoverflow, EffectCube, EffectFade, EffectFlip, Autoplay } from 'swiper';\r\nrequire('../scss/bs4.scss');\r\n\r\ninterface SwiperOptions {\r\n autoplay: string;\r\n speed: string;\r\n effectDefaults: any;\r\n fallback: any; // see effect fallback in custom app settings\r\n}\r\n\r\nfunction initAppSwiper({ moduleId, options } : { moduleId: string, options: SwiperOptions }) {\r\n let configured = {\r\n autoplay: options.autoplay,\r\n speed: options.speed,\r\n modules: [Navigation, Pagination, Parallax, EffectCoverflow, EffectCube, EffectFade, EffectFlip, Autoplay],\r\n };\r\n let merged = Object.assign(options.fallback, options.effectDefaults, configured);\r\n new Swiper (`.swiper-${moduleId}`, merged);\r\n}\r\n\r\n// so it can be called from the HTML when content re-initializes dynamically\r\nconst winAny = (window as any);\r\nwinAny.appSwiper2 ??= {};\r\nwinAny.appSwiper2.init ??= initAppSwiper;\r\n"],"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","win","window","Dom7","Array","items","super","proto","__proto__","defineProperty","get","set","value","makeReactive","arrayFlat","arr","res","el","isArray","push","arrayFilter","prototype","filter","call","$","selector","context","html","trim","indexOf","toCreate","tempParent","innerHTML","i","a","qsa","nodeType","uniqueArray","arrayUnique","fn","noTrigger","split","shortcut","name","args","trigger","on","Methods","addClass","classes","classNames","map","c","classList","add","removeClass","remove","hasClass","className","contains","toggleClass","toggle","attr","attrs","arguments","getAttribute","attrName","removeAttr","removeAttribute","transform","transition","duration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","e","eventData","dom7EventData","unshift","is","apply","parents","k","handleEvent","undefined","events","j","event","dom7LiveListeners","proxyListener","dom7Listeners","off","handlers","handler","dom7proxy","splice","evt","detail","bubbles","cancelable","data","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","props","prop","each","index","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","els","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parent","parentNode","closest","find","foundElements","found","removeChild","methodName","writable","nextTick","delay","now","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","o","slice","to","noExtend","nextSource","node","HTMLElement","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","time","startTime","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","calcSupport","getDevice","overrides","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","toLowerCase","isWebView","test","calcBrowser","priority","self","method","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","updateSize","$el","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","Number","isNaN","assign","size","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","marginRight","centeredSlides","cssMode","gridEnabled","grid","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","ceil","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","slideBefore","slideAfter","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","destroyed","transitionEmit","direction","step","slideTo","initial","Error","indexAsNumber","isFinite","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","t","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","diff","loopDestroy","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","type","which","button","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","preventDefault","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","onTouchEnd","touchEndTime","timeDiff","lastClickTime","currentPos","stopIndex","groupSize","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","start","passiveListeners","passive","move","end","cancel","updateOnWindowResize","attachEvents","bind","detachEvents","isGridEnabled","breakpoint","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","containerModifierClass","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","disable","enable","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","addClasses","suffixes","entries","prefix","resultClasses","item","prepareClasses","removeClasses","init","resizeObserver","createElements","url","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","update","moving","isLocked","cursor","unsetGrabCursor","wasLocked","lastSlideIndex","lastSlideRightEdge","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","extendParams","swiperParams","defaults","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","options","getWrapper","wrapper","destroy","deleteInstance","cleanStyles","object","deleteProps","static","newDefaults","module","m","installModule","prototypeGroup","protoMethod","use","observer","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","Virtual","renderSlide","cache","$slideEl","force","addSlidesBefore","addSlidesAfter","from","previousFrom","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","appendSlide","prependSlide","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","removeSlide","slidesIndexes","removeAllSlides","Keyboard","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","Mousewheel","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","position","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","releaseScroll","createElementIfNotDefined","checkProps","element","Navigation","getEl","toggleEl","disabled","disabledClass","tagName","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","_s","targetEl","pagination","clickable","isHidden","classesToSelector","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","lastIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","Scrollbar","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","hide","opacity","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","Parallax","parallax","setTransform","p","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","Zoom","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","Lazy","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","Controller","LinearSpline","binarySearch","guess","array","i1","i3","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","A11y","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notify","message","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","click","updateNavigation","hasPagination","initNavEl","wrapperId","controls","addElControls","$containerEl","repeat","round","random","getRandomNumber","live","addElLive","bulletEl","updatePagination","History","root","paths","slugify","getPathValues","urlOverride","URL","pathArray","part","setHistory","includes","currentState","state","scrollToSlide","setHistoryPopState","hashNavigation","HashNavigation","watchState","onHashChange","newHash","setHash","Autoplay","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","Thumb","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","pop","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","Grid","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","indexToRemove","Manipulation","effectInit","overwriteParams","perspective","overwriteParamsResult","effectTarget","effectParams","transformEl","effectVirtualTransitionEnd","allSlides","$transitionEndTarget","eventTriggered","triggerEvents","EffectFade","fadeEffect","crossFade","tx","ty","slideOpacity","EffectCube","cubeEffect","slideShadows","shadow","shadowOffset","shadowScale","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowBefore","shadowAfter","shadowAngle","sin","scale1","scale2","zFactor","createShadow","shadowClass","$shadowContainer","$shadowEl","EffectFlip","flipEffect","limitRotation","rotateY","rotateX","zIndex","EffectCoverflow","coverflowEffect","rotate","stretch","depth","modifier","center","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","EffectCreative","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","r","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","EffectCards","cardsEffect","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","d","definition","hasOwnProperty","Symbol","toStringTag","winAny","appSwiper2","configured","merged","fallback","effectDefaults"],"sourceRoot":""}