{"version":3,"file":"model.bundle.js","mappings":"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","sources":["webpack://4tochki/./webpack/src/modules/gallery360/index.js","webpack://4tochki/./webpack/src/modules/sliders/sliderSimilarGoods/index.js","webpack://4tochki/./webpack/src/modules/goodTabs/index.js","webpack://4tochki/./webpack/src/modules/goGoodsPageCart/index.js","webpack://4tochki/./webpack/src/modules/restOfGoods/index.js","webpack://4tochki/./webpack/src/modules/imageZoomer/index.js","webpack://4tochki/./webpack/src/modules/sliders/sliderGoodsImg/index.js","webpack://4tochki/./webpack/bundles/model/index.js","webpack://4tochki/./webpack/src/modules/compare-head/templateCompareHead.js","webpack://4tochki/./webpack/src/modules/compare-head/index.js","webpack://4tochki/./webpack/src/modules/flipbox/index.js","webpack://4tochki/./webpack/src/modules/getAvailableInfo/index.js","webpack://4tochki/./webpack/src/modules/getBadgetInfo/index.js","webpack://4tochki/./webpack/src/modules/imagePopup/new.js","webpack://4tochki/./webpack/src/modules/modalAfterAddToCart/index.js","webpack://4tochki/./webpack/src/modules/opinionForm/index.js","webpack://4tochki/./webpack/src/modules/restListPopovers/index.js","webpack://4tochki/./node_modules/bootstrap/js/dist/popover.js","webpack://4tochki/./node_modules/bootstrap/js/dist/tab.js","webpack://4tochki/./node_modules/bootstrap/js/dist/tooltip.js","webpack://4tochki/./node_modules/bootstrap/js/dist/util/sanitizer.js","webpack://4tochki/./node_modules/bootstrap/js/dist/util/template-factory.js","webpack://4tochki/./node_modules/swiper/modules/keyboard.mjs","webpack://4tochki/./node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack://4tochki/./node_modules/swiper/modules/navigation.mjs","webpack://4tochki/./node_modules/swiper/shared/classes-to-selector.mjs","webpack://4tochki/./node_modules/swiper/modules/pagination.mjs","webpack://4tochki/./node_modules/swiper/modules/zoom.mjs","webpack://4tochki/./node_modules/swiper/modules/thumbs.mjs","webpack://4tochki/./node_modules/swiper/shared/ssr-window.esm.mjs","webpack://4tochki/./node_modules/swiper/shared/utils.mjs","webpack://4tochki/./node_modules/swiper/shared/swiper-core.mjs"],"sourcesContent":["/* !\n* GALLERY 360\n*/\n\nexport const gallery360 = {\n bindEvents: function() {\n const $modal360 = document.querySelector('[data-target=\"#modal360\"]');\n if ($modal360 !== null) {\n $modal360.addEventListener('click', () => {\n require(['js-cloudimage-360-view'], function() {\n document.querySelector('#modal360 .js-cloudimage-360').classList.add('cloudimage-360');\n window.CI360.init();\n });\n });\n }\n },\n};\n","/* NO JQUERY */\nimport './index.scss';\nimport Swiper from 'swiper';\nimport {Navigation} from 'swiper/modules';\nimport 'swiper/scss/navigation';\n\nexport const sliderSimilarGoods = {\n init: function() {\n new Swiper('.SwiperSimilarGoods', {\n slidesPerView: 4,\n spaceBetween: 0,\n modules: [Navigation],\n navigation: {\n nextEl: '.sliderSimilarGoods-prev',\n prevEl: '.sliderSimilarGoods-next',\n },\n on: {\n sliderMove: function(e) {\n galleryEdgeGradient(e);\n },\n slideChange: function(e) {\n galleryEdgeGradient(e);\n },\n },\n breakpoints: {\n 0: {\n slidesPerView: 1.5,\n spaceBetween: 14,\n },\n 420: {\n slidesPerView: 2,\n spaceBetween: 14,\n },\n 550: {\n slidesPerView: 2.2,\n spaceBetween: 14,\n },\n 1010: {\n slidesPerView: 5,\n spaceBetween: 14,\n },\n 1450: {\n slidesPerView: 6,\n spaceBetween: 14,\n },\n },\n });\n },\n};\n\nfunction galleryEdgeGradient(element) {\n if (element.isBeginning) {\n element.el.classList.add('sliderSimilarGoods--begin');\n element.el.classList.remove('sliderSimilarGoods--end');\n } else if (element.isEnd) {\n element.el.classList.add('sliderSimilarGoods--end');\n element.el.classList.remove('sliderSimilarGoods--begin');\n } else {\n element.el.classList.remove('sliderSimilarGoods--begin');\n element.el.classList.remove('sliderSimilarGoods--end');\n }\n}\n","import './index.scss';\nimport { config } from 'core/config';\nimport { spinner } from 'modules/spinner';\nimport Tab from 'bootstrap/js/dist/tab';\nimport { sliderSimilarGoods } from \"modules/sliders/sliderSimilarGoods\";\n\nexport const goodTabs = {\n opinionsPage: 1,\n opinionsYear: '',\n config: {\n videoTabId: '#pills-video-tab',\n opinionsRow: '.opinions-row',\n opinionsButton: '.js-good-opinions',\n descriptionTabId: '#pills-description-tab',\n },\n init: function () {\n this.bindEvents();\n this.processHash();\n if (document.querySelector('#pills-sizes-tab') !== null) {\n this.initSearchBarModel();\n }\n const $opinionsButton = document.querySelector(goodTabs.config.opinionsButton);\n if ($opinionsButton !== null) {\n $opinionsButton.addEventListener('click', () => {\n const $$opinionsBlock = document.querySelectorAll('.opinionBlock');\n if ($$opinionsBlock.length < 20) {\n --goodTabs.opinionsPage;\n }\n const pageVal = ++goodTabs.opinionsPage;\n goodTabs.searchOpinions(pageVal);\n });\n }\n },\n searchOpinions: function (page = 1, year = goodTabs.opinionsYear) {\n const $loaderBlock = document.querySelector('.js-loader-block');\n spinner.show($loaderBlock);\n const request = `&sortBy=dt&page=${page}&year=${year}&rateIn_5=&rateIn_4=&rateIn_3=&rateIn_2=&rateIn_1=`;\n const link = controllerConfigHead.get('allOpinionsLink') + request;\n const $opinionsRow = document.querySelector(goodTabs.config.opinionsRow);\n config.post(link, request, 'html').then((response) => {\n if (year && page && year > 0 && page == 1) {\n $opinionsRow.innerHTML = response;\n } else {\n $opinionsRow.insertAdjacentHTML('beforeend', response);\n }\n if (page * 20 > $opinionsRow.dataset.count) {\n document.querySelector(goodTabs.config.opinionsButton).hidden = true;\n }\n\n // удаление дублей ?\n document.querySelectorAll('.opinionBlock').forEach((element) => {\n const cl = `.opinion_${element.dataset.opinionId}`;\n const $$cl = document.querySelectorAll(cl);\n if ($$cl.length > 1) {\n element.remove();\n }\n });\n spinner.hide($loaderBlock);\n });\n },\n bindEvents: function () {\n const $$VideoImgPlay = document.querySelectorAll('.js-video-img-play');\n if ($$VideoImgPlay.length > 0) {\n $$VideoImgPlay.forEach((element) => {\n element.addEventListener('click', function () {\n element.innerHTML = `\n \n `;\n });\n });\n }\n\n window.addEventListener('hashchange', () => {\n goodTabs.processHash();\n });\n Array.from(document.querySelectorAll('#pills-tab a[data-bs-toggle=\"pill\"]'))\n .forEach((element) => element.addEventListener('shown.bs.tab', function (event) {\n event.preventDefault();\n history.pushState({}, '', '#' + event.target.id);\n }));\n },\n processHash: function () {\n if (window.location.hash.length > 0) {\n const tabId = window.location.hash;\n this.openTab(tabId);\n this.scrollToTab(tabId);\n }\n },\n openTab: function (id) {\n if (Array.from(id)[0] === '#') {\n id = id.substring(1);\n }\n id = id.replace(/[^a-zA-Z0-9-_#]/g, '');\n const tabInstanse = document.querySelector(`.nav-link#${id}`);\n if (tabInstanse !== null) {\n const tab = Tab.getOrCreateInstance(tabInstanse);\n tab.show();\n }\n },\n scrollToTab: function (id) {\n id = id.replace(/[^a-zA-Z0-9-_#]/g, '');\n const $scrollElement = document.querySelector(id);\n if ($scrollElement !== null) {\n $scrollElement.scrollIntoView({\n block: 'center',\n behavior: 'smooth',\n });\n }\n },\n initSearchBarModel: function () {\n const $searchBarSizes = document.querySelector('.searchbar-sizes');\n const $modelResults = document.querySelector('.model-result');\n const $$modelResultsGroups = $modelResults.querySelectorAll('.list-group');\n const $modelResultsAlter = document.querySelector('.model-result__alternative');\n\n function handleSearchSubmit(e) {\n if (e) e.preventDefault();\n\n const fd = new FormData($searchBarSizes);\n const tsh = fd.get('Tsh') ? `[data-tsh=\"${fd.get('Tsh')}\"]` : '';\n const tprof = fd.get('Tprof') ? `[data-tprof=\"${fd.get('Tprof')}\"]` : '';\n const td = fd.get('Td') ? `[data-td=\"${fd.get('Td')}\"]` : '';\n\n const $$resultItems = document.querySelectorAll(`.model-result .list-group-item${tsh}${tprof}${td}`);\n\n if ($$resultItems.length > 0) {\n $modelResults.hidden = false;\n $modelResultsAlter.hidden = true;\n $modelResults.querySelectorAll('.list-group-item').forEach((el) => {\n el.hidden = true;\n });\n $$resultItems.forEach((el) => {\n el.hidden = false;\n });\n $$modelResultsGroups.forEach((el) => {\n const size = el.querySelectorAll('.list-group-item:not([hidden])').length;\n const header = el.previousElementSibling;\n const headerCounter = header.querySelector('.js-size-counter');\n headerCounter.textContent = size;\n header.hidden = !size;\n });\n } else {\n $modelResults.hidden = true;\n $modelResultsAlter.hidden = false;\n spinner.show($searchBarSizes);\n spinner.show($modelResultsAlter);\n config.get('/catalog/search/', fd).then((result) => {\n $modelResultsAlter.innerHTML = result.template;\n spinner.hide($searchBarSizes);\n window.lazyload();\n sliderSimilarGoods.init();\n });\n }\n }\n\n if ($searchBarSizes !== null) {\n // Вешаем обработчик на отправку формы\n $searchBarSizes.addEventListener('submit', handleSearchSubmit);\n }\n\n // Проверяем параметры и вызываем обработку формы, если они есть\n const searchFormGet = new FormData($searchBarSizes);\n if (searchFormGet.get('Tsh') && searchFormGet.get('Tprof') && searchFormGet.get('Td')) {\n handleSearchSubmit();\n }\n },\n\n};\n\n// 3d\nlet currentIndex = 0;\nconst $$slides = document.querySelectorAll('.image-block');\nif ($$slides.length > 0) {\n function showSlide(index) {\n $$slides.forEach((slide) => {\n slide.style.display = 'none';\n });\n $$slides[index].style.display = 'block';\n }\n showSlide(currentIndex);\n\n function nextSlide() {\n currentIndex = (currentIndex + 1) % $$slides.length;\n showSlide(currentIndex);\n }\n\n function prevSlide() {\n currentIndex = (currentIndex - 1 + $$slides.length) % $$slides.length;\n showSlide(currentIndex);\n }\n\n let interval = setInterval(nextSlide, 1000);\n\n document.querySelector('.js-gallerySlider').addEventListener('mouseover', function () {\n clearInterval(interval);\n });\n document.querySelector('.js-gallerySlider').addEventListener('mouseout', function () {\n interval = setInterval(nextSlide, 1000);\n });\n\n document.querySelector('.sliderGallery-prev').addEventListener('click', function () {\n prevSlide();\n });\n document.querySelector('.sliderGallery-next').addEventListener('click', function () {\n nextSlide();\n });\n}\n\n","// import './index.scss';\nimport {config} from 'core/config';\nimport {metricaModule} from 'modules/metrica';\nimport {modalAfterAddToCart} from 'modules/modalAfterAddToCart';\nimport {spinner} from 'modules/spinner';\n/**\n * @param {{common:Object}} window\n * @param {{cartHead:Object}} common\n */\nclass GoGoodsPageCartWidget {\n stringToInt(string) {\n return string.trim().replace(/[\\u202F\\u00A0 ]/, '');\n }\n priceFormat(integer) {\n return integer.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\n }\n constructor($root) {\n const that = this;\n that.setElementsInstance($root);\n const cost = this.stringToInt(that.elementsInstance.goodPrice.innerText) || 'undefined';\n const finalCost = that.initialSumInCart(cost);\n that.elementsInstance.priceTotal.forEach((priceTotal) => {\n priceTotal.innerHTML = this.priceFormat(finalCost);\n });\n that.elementsInstance.decrement.addEventListener('click', function() {\n that.decrement(this);\n });\n that.elementsInstance.increment.addEventListener('click', function() {\n that.increment(this);\n });\n\n that.elementsInstance.goodCount.addEventListener('input', function() {\n let value = parseInt(this.value);\n if (!(value > 0)) {\n value = 1;\n }\n const rest = this.dataset.rest;\n if (rest < value) {\n value = rest;\n }\n this.value = value;\n that.nInputConst = value;\n that.checkSum();\n that.checkQuickOrder();\n });\n\n /* Add to cart in page, on click - page products without table */\n that.elementsInstance.addToCartButton.addEventListener('click', function(e) {\n e.preventDefault();\n const $form = this.closest('form');\n const goodId = $form.querySelector('input[name=orderAddGoodId]').value;\n const count = $form.querySelector('input[name=orderAddCount]').value;\n const addToCartButton = that.elementsInstance.addToCartButton;\n config.post('/Orders/addtocart/', {goGoodId:goodId,count:count}, 'html').then((answer) => {\n common.cartHead.reloadCarts({\n 'reason': 'add',\n 'good_id': goodId,\n });\n modalAfterAddToCart.setContent(answer);\n modalAfterAddToCart.show();\n modalAfterAddToCart.yaMetrika();\n // const label = that.getAddLabel();\n // label.classList.toggle('d-flex');\n //\n addToCartButton.classList.remove('btn-tochki-primary');\n addToCartButton.classList.add('btn-success');\n addToCartButton.textContent = 'В корзине';\n addToCartButton.disabled = true;\n //\n metricaModule.sendEvent(metricaModule.getMetricaRegionId(), 'ORDER');\n });\n return false;\n });\n\n const canFastOrder = that.elementsInstance.quickOrderForm;\n if(canFastOrder){\n that.elementsInstance.quickOrderForm.addEventListener('submit', function(e) {\n e.preventDefault();\n modalAfterAddToCart.yaMetrika();\n const $form = e.target.closest('form');\n const $modalQuick = e.target.closest('.modal-content');\n if (e.target && $modalQuick) {\n spinner.show($modalQuick, 48);\n const quickFormData = new FormData(e.target);\n for (const pair of quickFormData.entries()) {\n console.log(pair[0] + ', ' + pair[1]);\n }\n\n let params = {};/// restOfGoodsWidget\n params['goodId'] = document.querySelector('.restOfGoodsWidget input[name=orderAddGoodId]').value;\n params['count'] = document.querySelector('.restOfGoodsWidget input[name=orderAddCount]').value;\n params['shortOrder'] = 1;\n params['userFIO'] = $modalQuick.querySelector('input[name=quickName]').value;\n params['userPhone'] = $modalQuick.querySelector('input[name=quickPhone]').value;\n params['userEmail'] = $modalQuick.querySelector('input[name=quickEmail]').value;\n params['code'] ='google';\n\n if (!quickFormData.get('code')) {\n setTimeout(function() {\n alert('Подтвердите, что Вы не робот');\n spinner.hide($modalQuick);\n }, 1000);\n } else {\n config.get('/orders/actionshortorderfromsizepage/', params, 'json').then((answer) => {\n spinner.hide($modalQuick);\n if (answer.error){\n $modalQuick.querySelector('.errors').innerHTML = '';\n for (var key of Object.keys(answer.error)) {\n $modalQuick.querySelector('.errors').innerHTML += answer.error[key].message;\n }\n }\n if(answer.url){\n window.location.href=answer.url;\n }\n });\n }\n\n }\n\n });\n }\n }\n\n setElementsInstance($root) {\n this.elementsInstance = {\n goodPrice: $root.querySelector('.goGoodPageCartWidget__good-price'),\n priceTotal: $root.querySelectorAll('.goGoodPageCartWidget__price-total'),\n decrement: $root.querySelector('.goGoodPageCartWidget__decrement'),\n increment: $root.querySelector('.goGoodPageCartWidget__increment'),\n goodCount: $root.querySelector('.goGoodPageCartWidget__goodCount'),\n addToCartButton: $root.querySelector('.goGoodPageCartWidget__add-to-cart'),\n quickOrderForm: document.querySelector('#modalQuickOrder'),\n quickOrderButton: $root.querySelector('.quickOrderButton'),\n };\n }\n\n // getAddLabel() {\n // let label = this.elementsInstance.addToCartButton.previousElementSibling;\n // if (!label) {\n // label = document.createElement('span');\n // label.classList = 'badge bg-success goGoodsWidget__badge-success';\n // label.textContent = 'Добавлено';\n // this.elementsInstance.addToCartButton.insertAdjacentElement('beforebegin', label);\n // }\n // return label;\n // }\n\n initialSumInCart(cost) {\n const that = this;\n const inputCount = that.elementsInstance.goodCount.value;\n if (inputCount) {\n this.nInputConst = inputCount;\n }\n return cost * that.nInputConst;\n }\n\n decrement() {\n const that = this;\n\n let value = that.elementsInstance.goodCount.value;\n\n if (value > 1) {\n value--;\n }\n that.elementsInstance.goodCount.value = value;\n that.nInputConst = value;\n that.checkSum();\n that.checkQuickOrder();\n return false;\n }\n\n increment() {\n const that = this;\n let dataRest = that.elementsInstance.goodCount.dataset.rest * 1;\n if (dataRest === 12) {\n dataRest = 99;\n }\n\n let value = that.elementsInstance.goodCount.value;\n\n if (value < dataRest) {\n value++;\n }\n\n that.elementsInstance.goodCount.value = value;\n\n that.nInputConst = value;\n that.checkSum();\n that.checkQuickOrder();\n return false;\n }\n\n checkSum() {\n const price = this.stringToInt(this.elementsInstance.goodPrice.innerText);\n const value = price * this.nInputConst;\n this.elementsInstance.priceTotal.forEach((priceTotal) => {\n priceTotal.innerHTML = this.priceFormat(value);\n const priceTotalSum = parseFloat(this.priceFormat(value).replace(/\\s+/g, ''));\n const btnPodeli = document.querySelector('.btn-podeli');\n const podeliWidget = document.querySelector('.podeli_widget');\n\n if (!btnPodeli) return false;\n\n if (priceTotalSum >= 50000) {\n if (!btnPodeli.classList.contains('d-none')) {\n btnPodeli.classList.add('d-none');\n }\n } else {\n if (btnPodeli.classList.contains('d-none') && (podeliWidget === null || !podeliWidget.classList.contains('show'))) {\n btnPodeli.classList.remove('d-none');\n }\n }\n });\n if(typeof(CartWidget) !== 'undefined'){\n document.getElementById('podeliButtonPrice').innerHTML = this.priceFormat(value)\n CartWidget.init({\n total: value,\n minLimit: 300,\n maxLimit: 50000,\n selectorToInject: \".podeli_widget\",\n });\n }\n }\n\n checkQuickOrder() {\n const quickOrderButton = this.elementsInstance.quickOrderButton;\n if (quickOrderButton) {\n if(this.elementsInstance.goodCount.dataset.availablenotk && this.elementsInstance.goodCount.dataset.availablenotk < this.nInputConst){\n quickOrderButton.classList.add('d-none');\n }else{\n quickOrderButton.classList.remove('d-none');\n }\n }\n }\n\n\n}\n\nexport const goGoodsPageCart = {\n nInputConst: 4,\n elementsInstance: {},\n init: function() {\n document.querySelectorAll('.goGoodPageCartWidget').forEach((widget) => {\n new GoGoodsPageCartWidget(widget);\n });\n },\n};\n","import {spinner} from 'modules/spinner';\nimport {config} from 'core/config';\nimport {restListPopover} from 'modules/restListPopovers';\nimport {getAvailableInfo} from \"modules/getAvailableInfo\";\n\nexport const restOfGood = {\n SELF_GROUP: 'self',\n priceFormat: function(integer) {\n return integer.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\n },\n init: function() {\n restListPopover.loadRests();\n const sizePrices = document.getElementById('sizePrices');\n if (sizePrices) {\n sizePrices.onclick = function(event) {\n let target = event.target;\n getAvailableInfo(target);\n }\n }\n const that = this;\n const widgets = document.querySelectorAll('.restOfGoodsWidget');\n if (widgets.length) {\n const data = {ids: {}};\n const formData = new FormData();\n let widgetGroups = [];\n widgets.forEach((widget) => {\n const logistDay = widget.dataset.logistDay;\n const goodId = widget.dataset.goodId;\n data.ids[goodId] = {\n 'id': goodId,\n };\n formData.append(`ids[${goodId}][id]`, goodId);\n widget.classList.remove('d-none');\n const currentWidgetGroup = widget.dataset.group || that.SELF_GROUP;\n if (currentWidgetGroup !== that.SELF_GROUP) {\n widgetGroups.push(currentWidgetGroup);\n } else {\n spinner.show(widget);\n }\n });\n if (widgetGroups) {\n widgetGroups = widgetGroups.filter((item, index) => widgetGroups.indexOf(item) === index);\n widgetGroups.forEach((element) => spinner.show(element));\n }\n const singlepage = document.querySelectorAll('.singlepage');\n if (singlepage.length) {\n formData.append(`singlePage`, 1);\n }\n config.post('/?action=restList', formData).then((data) => {\n let widgetGroups = [];\n for (const key in data) {\n if (!data.hasOwnProperty(key)) {\n continue;\n }\n const goodId = key;\n let item = [...widgets].filter(widget => widget.dataset.goodId === goodId);\n item = item[0];\n if (data[key].hide || !data[key].cost) {\n item.parentNode.remove();\n } else {\n if (item.classList.contains('.item-sparka') && data[key].countInCard > 2) {\n data[key].countInCard = 2;\n }\n const widgetCost = parseInt(data[key].cost);\n const widgetTotal = widgetCost * data[key].countInCard;\n item.querySelector('.restOfGoodsWidget__price').innerHTML = that.priceFormat(widgetCost);\n item.querySelectorAll('.restOfGoodsWidget__price-total').forEach((total) => {\n total.innerHTML = that.priceFormat(widgetTotal);\n });\n item.querySelector('.restOfGoodsWidget__count-value').value = data[key].countInCard;\n\n const icon = item.querySelector('.available-icon');\n if (icon) {\n if (data[key].aviable) {\n icon.classList.remove('icon-order');\n icon.classList.add('icon-ok');\n } else {\n icon.classList.add('icon-order');\n icon.classList.remove('icon-ok');\n }\n }\n if (item.querySelector('.available-text')) {\n item.querySelector('.available-text').innerHTML = data[key].text;\n }\n if (item.querySelector('.goodsList__avail')) {\n item.querySelector('.goodsList__avail').innerHTML = data[key].text;\n if (data[key].instock == 1) {\n item.querySelector('.delivery').classList.add('d-none');\n item.querySelector('.instock').classList.remove('d-none');\n } else {\n item.querySelector('.instock').classList.add('d-none');\n item.querySelector('.delivery').classList.remove('d-none');\n }\n }\n }\n const currentWidgetGroup = item.dataset.group || restOfGood.SELF_GROUP;\n if (currentWidgetGroup !== restOfGood.SELF_GROUP) {\n widgetGroups.push(currentWidgetGroup);\n } else {\n spinner.hide(item);\n restListPopover.initPopoverListener();\n }\n }\n if (widgetGroups) {\n widgetGroups = widgetGroups.filter((item, index) => widgetGroups.indexOf(item) === index);\n widgetGroups.forEach((element) => spinner.hide(element));\n }\n const $$notUpdatedItems = document.querySelectorAll('#pills-sizes .goGoodPageCartWidget.spinner-box-parent');\n $$notUpdatedItems.forEach((el) => {\n el.closest('.list-group-item').hidden = true;\n });\n });\n }\n },\n};\n","import './index.scss';\nimport { imagePopup } from 'modules/imagePopup/new.js';\n\nconst ZOOM_IMG_ID = 'myimage';\nconst ZOOM_RESULT_ID = 'myresult';\nconst ZOOM_LENS_CLASS = 'img-zoom-lens';\n\nexport const imageZoomer = {\n init: function () {\n imagePopup.init();\n imageZoomer.imageZoom();\n },\n imageZoom: function () {\n const IMG = document.getElementById(ZOOM_IMG_ID);\n const RESULT = document.getElementById(ZOOM_RESULT_ID);\n const LENS = document.createElement('DIV');\n if (IMG === null) return;\n LENS.classList += ZOOM_LENS_CLASS;\n IMG.parentElement.insertBefore(LENS, IMG);\n\n LENS.addEventListener('mousemove', moveLens);\n IMG.addEventListener('mousemove', moveLens);\n LENS.addEventListener('mouseleave', function () {\n LENS.style.opacity = '0';\n RESULT.style.display = 'none';\n });\n\n function moveLens(e) {\n e.preventDefault();\n const cx = RESULT.offsetWidth / LENS.offsetWidth;\n const cy = RESULT.offsetHeight / LENS.offsetHeight;\n\n if (!RESULT.style.backgroundImage.length) {\n RESULT.style.backgroundImage = 'url(\\'' + IMG.src.split('?')[0] + '\\')';\n }\n RESULT.style.backgroundSize = (IMG.width * cx) + 'px ' + (IMG.height * cy) + 'px';\n\n LENS.style.opacity = '1';\n RESULT.style.display = 'block';\n\n const pos = getCursorPos(e);\n let x = pos.x - (LENS.offsetWidth / 2);\n let y = pos.y - (LENS.offsetHeight / 2);\n if (x > IMG.width - LENS.offsetWidth) {\n x = IMG.width - LENS.offsetWidth;\n }\n if (x < 0) {\n x = 0;\n }\n if (y > IMG.height - LENS.offsetHeight) {\n y = IMG.height - LENS.offsetHeight;\n }\n if (y < 0) {\n y = 0;\n }\n LENS.style.left = x + 'px';\n LENS.style.top = y + 'px';\n RESULT.style.backgroundPosition = '-' + (x * cx) + 'px -' + (y * cy) + 'px';\n }\n function getCursorPos(e) {\n e = e || window.event;\n let x = 0;\n let y = 0;\n const a = IMG.getBoundingClientRect();\n x = e.pageX - a.left;\n y = e.pageY - a.top;\n x = x - window.pageXOffset;\n y = y - window.pageYOffset;\n return { x: x, y: y };\n }\n\n // показываем фото на весь экран\n LENS.addEventListener('click', () => {\n RESULT.classList.add('active');\n });\n RESULT.addEventListener('click', () => {\n RESULT.classList.remove('active');\n });\n },\n};\n","import './index.scss';\n\nimport Swiper from 'swiper';\nimport {Zoom, Thumbs, Pagination, Keyboard, Navigation} from 'swiper/modules';\nimport 'swiper/css';\nimport 'swiper/css/zoom';\nimport 'swiper/css/thumbs';\nimport 'swiper/css/pagination';\nimport 'swiper/css/navigation';\n\nexport const sliderGoodsImg = {\n init: function() {\n this.initSwiper();\n this.initLightBox();\n },\n initSwiper: function() {\n document.querySelectorAll('.gallery').forEach((el) => {\n const $target = el.querySelector('.gallery_swiper');\n const $swiperWrapper = el.querySelector('.gallery_swiper .swiper-wrapper');\n\n if ($swiperWrapper) {\n const $gal = $swiperWrapper.cloneNode(true);\n\n $target.addEventListener('click', () => {\n $gal.querySelectorAll('.swiper-zoom-container').forEach(el => {\n const $img = el.querySelector('img');\n const $preloader = el.querySelector('.swiper-lazy-preloader');\n if ($img.dataset.src) {\n $img.src = $img.dataset.src;\n $img.classList.remove('lazyload');\n }\n if ($img) $img.removeAttribute('loading');\n if ($preloader) $preloader.remove();\n });\n\n const $lightBox = document.createElement('div');\n $lightBox.classList.add('og-lightbox', 'og-lightbox--active');\n $lightBox.append($gal);\n $lightBox.insertAdjacentHTML('afterbegin', '
');\n\n const $prevButton = document.createElement('div');\n $prevButton.classList.add('lightbox-button', 'lightbox-button--prev');\n $prevButton.innerHTML = `\n \n \n \n \n `;\n\n const $nextButton = document.createElement('div');\n $nextButton.classList.add('lightbox-button', 'lightbox-button--next');\n $nextButton.innerHTML = `\n \n \n \n \n `;\n $lightBox.append($prevButton, $nextButton);\n document.body.append($lightBox);\n\n const galleryLightbox = new Swiper(`.og-lightbox`, {\n modules: [Zoom, Pagination, Keyboard],\n loop: false,\n lazy: false,\n autoHeight: true,\n slidesPerView: 1,\n spaceBetween: 0,\n initialSlide: $target.dataset.active,\n zoom: true,\n keyboard: {\n enabled: true,\n onlyInViewport: false,\n },\n pagination: {\n el: '.og-lightbox .swiper-pagination',\n },\n });\n\n const updateButtonStates = () => {\n const totalSlides = galleryLightbox.slides.length;\n const activeIndex = galleryLightbox.activeIndex;\n\n if (activeIndex === 0) {\n $prevButton.classList.add('disabled');\n } else {\n $prevButton.classList.remove('disabled');\n }\n\n if (activeIndex === totalSlides - 1) {\n $nextButton.classList.add('disabled');\n } else {\n $nextButton.classList.remove('disabled');\n }\n };\n\n updateButtonStates();\n\n $prevButton.addEventListener('click', (e) => {\n e.stopPropagation();\n galleryLightbox.slidePrev();\n updateButtonStates();\n });\n\n $nextButton.addEventListener('click', (e) => {\n e.stopPropagation();\n galleryLightbox.slideNext();\n updateButtonStates();\n });\n\n galleryLightbox.on('slideChange', updateButtonStates);\n\n $lightBox.addEventListener('click', (e) => {\n if (e.target.tagName === 'DIV') {\n $lightBox.remove();\n galleryLightbox.destroy();\n }\n });\n });\n\n const galleryThumbs = new Swiper('.gallery_swiper-thumbs', {\n spaceBetween: 10,\n slidesPerView: 3,\n loop: false,\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n breakpoints: {\n '@0.75': {slidesPerView: 2.5},\n '@1.00': {slidesPerView: 3.5},\n },\n });\n\n const galleryTop = new Swiper('.gallery_swiper', {\n modules: [Thumbs, Navigation],\n init: false,\n loop: false,\n slidesPerView: 1,\n spaceBetween: 0,\n thumbs: {swiper: galleryThumbs},\n navigation: {\n nextEl: '.swiper-gallery-controls .swiper-button-goods-img-next',\n prevEl: '.swiper-gallery-controls .swiper-button-goods-img-prev',\n },\n });\n\n galleryTop.on('slideChange', function() {\n galleryTop.el.dataset.active = galleryTop.activeIndex;\n if (galleryTop.activeIndex > 0 && galleryTop.activeIndex === galleryThumbs.visibleSlidesIndexes[0]) {\n galleryThumbs.slideTo(galleryThumbs.visibleSlidesIndexes[0] - 1);\n }\n if (galleryTop.activeIndex === galleryThumbs.visibleSlidesIndexes[galleryThumbs.visibleSlidesIndexes.length - 1]) {\n galleryThumbs.slideNext();\n }\n });\n\n galleryTop.on('init', function(e) {\n const $offsetHeight = [];\n const newWidth = e.size;\n e.slides.forEach(slide => {\n const $img = slide.querySelector('img');\n if ($img && $img.complete && !$img.classList.contains('lazyload')) {\n const $preloader = slide.querySelector('.swiper-lazy-preloader');\n if ($preloader) $preloader.remove();\n }\n const originalWidth = $img.getAttribute('width');\n const originalHeight = $img.getAttribute('height');\n const newHeight = (+originalHeight / +originalWidth) * newWidth;\n $offsetHeight.push(Math.trunc(newHeight));\n });\n galleryTop.el.style.height = Math.min(...$offsetHeight) + 'px';\n galleryTop.el.classList.add('gallery--active');\n });\n\n galleryTop.init();\n }\n });\n },\n initLightBox: function() {\n document.addEventListener('keyup', (e) => {\n const $lightbox = document.querySelector('.og-lightbox');\n if (e.key === \"Escape\" && $lightbox) {\n $lightbox.remove();\n }\n });\n }\n}","import './index.scss';\nimport {config} from 'core/config';\nimport {gallery360} from 'modules/gallery360';\nimport {flipbox} from 'modules/flipbox';\nimport {goodTabs} from 'modules/goodTabs';\nimport {goGoodsPageCart} from 'modules/goGoodsPageCart';\nimport {restOfGood} from 'modules/restOfGoods';\nimport {imageZoomer} from 'modules/imageZoomer';\nimport {opinionForm} from 'modules/opinionForm';\nimport {getBadgetInfo} from 'modules/getBadgetInfo';\nimport {compareHead} from 'modules/compare-head';\nimport {sliderSimilarGoods} from 'modules/sliders/sliderSimilarGoods';\nimport {sliderGoodsImg} from 'modules/sliders/sliderGoodsImg';\nimport Popover from 'bootstrap/js/dist/popover';\nimport Modal from 'bootstrap/js/dist/modal';\n\nconst modelController = {\n init: function() {\n this.bindEvents();\n compareHead.bindEvents();\n gallery360.bindEvents();\n flipbox.bindEvents();\n goodTabs.init();\n goGoodsPageCart.init();\n opinionForm.init();\n restOfGood.init();\n imageZoomer.init();\n this.initVideoLinks();\n modelController.initPopovers();\n modelController.widgetPodeli();\n sliderSimilarGoods.init();\n sliderGoodsImg.init();\n this.initFullDescriptionLink();\n if (document.querySelector('.likely') !== null) {\n import('ilyabirman-likely/release/likely.min.js').then(() => {\n console.log('likely inited');\n });\n }\n },\n initPopovers: () => {\n const popoverTriggerList = document.querySelectorAll('.b-item__container [data-bs-toggle=\"popover\"]');\n const popoverList = [...popoverTriggerList].map((popoverTriggerEl) => new Popover(popoverTriggerEl));\n },\n bindEvents: function() {\n const $$badget = document.querySelectorAll('.icon-badget');\n if ($$badget.length > 0) {\n $$badget.forEach(element => {\n element.addEventListener('click', () => {\n if (element.dataset.badget_type === 'leader') return;\n getBadgetInfo(element);\n });\n });\n }\n\n const $quickModal = document.querySelector('#modalQuickOrder');\n if ($quickModal) {\n $quickModal.addEventListener('shown.bs.modal', function () {\n if (typeof grecaptcha === 'undefined') {\n config.getScript('https://www.google.com/recaptcha/api.js?hl=ru', function () {\n $quickModal.querySelector('.g-recaptcha-father svg').remove();\n });\n }\n window.callMe.phoneMask();\n });\n }\n },\n initVideoLinks: function() {\n const allVideoLink = document.querySelector('.modelController__all-video-link');\n const onelVideoLink = document.querySelector('.modelController__one-video-link');\n if (allVideoLink !== null) {\n allVideoLink.addEventListener('click', () => {\n goodTabs.openTab(goodTabs.config.videoTabId);\n goodTabs.scrollToTab(goodTabs.config.videoTabId);\n return false;\n });\n }\n if (onelVideoLink !== null) {\n onelVideoLink.addEventListener('click', (event) => {\n const target = event.target;\n const $modelControllerVideo = document.querySelector(`.modelController__video[data-video-id=\"${target.dataset.videoId}\"]`);\n event.preventDefault();\n goodTabs.openTab(goodTabs.config.videoTabId);\n setTimeout(function() {\n $modelControllerVideo.scrollIntoView({\n block: 'center',\n behavior: 'smooth',\n });\n }, 500);\n return false;\n });\n }\n },\n initFullDescriptionLink: function() {\n const modelControllerLink = document.querySelector('.modelController__full-description-link');\n if (modelControllerLink !== null) {\n modelControllerLink.addEventListener('click', (event) => {\n event.preventDefault();\n goodTabs.openTab(goodTabs.config.descriptionTabId);\n goodTabs.scrollToTab(goodTabs.config.descriptionTabId);\n return false;\n });\n }\n },\n widgetPodeli: function () {\n const btnPodeli = document.querySelector('.btn-podeli');\n const totalPriceEl = document.querySelector('.restOfGoodsWidget__price-total');\n\n if (btnPodeli !== null && totalPriceEl !== null) {\n const totalPriceSum = parseFloat(totalPriceEl.textContent.replace(/\\s+/g, ''));\n\n if (totalPriceSum > 50000) {\n btnPodeli.classList.add('d-none');\n }\n btnPodeli.addEventListener('click', function () {\n const widgetPodeli = document.querySelector('.podeli_widget');\n widgetPodeli.classList.remove('d-none');\n widgetPodeli.classList.add('show');\n btnPodeli.classList.add('d-none');\n });\n }\n }\n};\n\nmodelController.init();","export const templateCompareHead = (data) =>\n `
\n
\n
\n
\n \n Товар ${data.name}\n \n ${data.action == 'add' ? 'добавлен в избранное' : 'удалён из избранного'}\n \n \n \n Всего в списке \n \n \n \n \n
\n
\n
\n \n В избранное\n \n
\n \n
\n
\n
\n
`;\n","import './index.scss';\n\nimport {config} from 'core/config';\nimport {templateCompareHead} from './templateCompareHead';\n\nconst SELECT = {\n 'good': '.js-compare-good',\n 'addedToCompare': 'js-added-to-compare',\n 'head': '.js-compare-head',\n 'headName': '.js-compare-name',\n 'headClose': '.js-compare-head-close',\n 'headCount': '.js-compare-count',\n 'headAction': '.js-compare-action-text',\n 'headDontShowBtn': '.js-compare-dontShow',\n 'jsonUrlAdd': '/compare/add',\n 'jsonUrlRemove': '/compare/remove',\n};\n\nexport const compareHead = {\n bindEvents: function() {\n const $addTofavorites = document.querySelector('.js-add-to-favorites');\n if ($addTofavorites !== null) {\n $addTofavorites.addEventListener('click', function() {\n if (this.classList.contains('added')) {\n this.querySelector('.link').textContent = 'Добавить в избранное';\n this.classList.remove('added');\n compareHead.removeGoodFromCompare(this.dataset.goodId);\n } else {\n this.classList.add('added');\n this.querySelector('.link').textContent = 'Удалить из избранного';\n compareHead.addGoodToCompare(this.dataset.goodId);\n }\n });\n }\n compareHead.setCompareStatus();\n },\n update: function(data) {\n const $compareHead = document.querySelector(SELECT.head);\n const $comparHeadName = document.querySelector(SELECT.headName);\n const $comparHeadCount = document.querySelector(SELECT.headCount);\n const $comparHeadAction = document.querySelector(SELECT.headAction);\n if ($compareHead !== null) {\n $compareHead.style.display = 'block';\n $comparHeadName.textContent = data.name;\n $comparHeadCount.innerHTML = '';\n if (data.action == 'add') {\n $comparHeadAction.innerHTML = 'добавлен в избранное';\n compareHead.addGoodToCompare(data.id);\n } else {\n $comparHeadAction.innerHTML = 'удалён из избранного';\n compareHead.removeGoodFromCompare(data.id);\n }\n } else {\n // $('#page').prepend(templateCompareHead(data));\n document.getElementById('page').insertAdjacentHTML('beforebegin', templateCompareHead(data));\n document.querySelector(SELECT.headClose).addEventListener('click', function() {\n document.querySelector(SELECT.head).style.display = 'none';\n });\n document.querySelector(SELECT.headDontShowBtn).addEventListener('click', function() {\n document.querySelector(SELECT.head).style.display = 'none';\n document.cookie = 'compareDontShow=true; max-age=86400; path=/;';\n });\n if (data.action == 'add') {\n compareHead.addGoodToCompare(data.id);\n } else {\n compareHead.removeGoodFromCompare(data.id);\n }\n };\n },\n addGoodToCompare: function(goodId) {\n config.get(SELECT.jsonUrlAdd, {gogoods_id: goodId}).then((response) => {\n compareHead.updateInHead();\n });\n document.cookie = 'compareDontShow=false; max-age=86400; path=/;';\n },\n removeGoodFromCompare: function(goodId) {\n config.get(SELECT.jsonUrlRemove, {gogoods_id: goodId}).then((response) => {\n compareHead.updateInHead();\n });\n },\n updateInHead: function() {\n const $headCount = document.querySelector(SELECT.headCount);\n config.get('/compare/list').then((response) => {\n if ($headCount !== null) $headCount.innerHTML = response.count_goods;\n const data = Object.values(response.goods);\n if (data.length > 0) {\n document.querySelector('.header-favorites .link').textContent = `Избранное (${data.length})`;\n } else {\n document.querySelector('.header-favorites .link').textContent = 'Избранное';\n }\n\n if (window.innerWidth <= config.breakpoints.lg) {\n const mobileCompare = document.querySelector('.compare-mobile');\n\n if (mobileCompare !== null && data.length > 0) {\n mobileCompare.classList.remove('d-none');\n let mobileLinkCompareVal = mobileCompare.querySelector('.compare-mobile-val');\n\n if (mobileLinkCompareVal === null) {\n mobileLinkCompareVal = document.createElement('span');\n mobileLinkCompareVal.classList.add('compare-mobile-val');\n mobileCompare.appendChild(mobileLinkCompareVal);\n }\n mobileLinkCompareVal.textContent = data.length;\n } else {\n mobileCompare.classList.add('d-none');\n }\n }\n });\n },\n setCompareStatus: function() {\n config.get('/compare/list').then((response) => {\n const data = Object.values(response.goods);\n if (data.length > 0) {\n document.querySelector('.header-favorites .link').textContent = `Избранное (${data.length})`;\n data.forEach((goodId) => {\n const $goodLink = document.querySelector(`.js-add-to-favorites[data-good-id=\"${goodId}\"]`);\n const $goodItem = document.querySelector(`.js-added-to-compare-${goodId}`);\n if ($goodLink) {\n $goodLink.classList.add('added');\n $goodLink.querySelector('.link').textContent = 'Удалить из избранного';\n }\n if ($goodItem) {\n $goodItem.classList.add('js-added-to-compare');\n $goodItem.title = 'Убрать из избранного';\n $goodItem.dataset.action = 'remove';\n }\n });\n }\n if (window.innerWidth <= config.breakpoints.lg) {\n const mobileCompare = document.querySelector('.compare-mobile');\n\n if (mobileCompare !== null && data.length > 0) {\n mobileCompare.classList.remove('d-none');\n let mobileLinkCompareVal = mobileCompare.querySelector('.compare-mobile-val');\n\n if (mobileLinkCompareVal === null) {\n mobileLinkCompareVal = document.createElement('span');\n mobileLinkCompareVal.classList.add('compare-mobile-val');\n mobileCompare.appendChild(mobileLinkCompareVal);\n }\n mobileLinkCompareVal.textContent = data.length;\n } else {\n mobileCompare.classList.add('d-none');\n }\n }\n });\n },\n};\n","import './index.scss';\n\nexport const flipbox = {\n bindEvents: function() {\n document.querySelectorAll('.js-flipbox-control').forEach((element) => {\n element.addEventListener('click', () => {\n document.querySelector('.flipbox').classList.toggle('flipbox--flipped');\n });\n });\n },\n};\n","import {config} from 'core/config';\nimport Dropdown from 'bootstrap/js/dist/dropdown';\n\nexport function getAvailableInfo(goodAvailableObj) {\n if (goodAvailableObj.jquery !== undefined) goodAvailableObj = $(goodAvailableObj)[0];\n const availableType = goodAvailableObj.dataset.available_type;\n if (availableType === undefined) {\n return false;\n }\n const param = {\n availableType: availableType,\n goodId: goodAvailableObj.dataset.item,\n };\n if (!goodAvailableObj.classList.contains(`was-loaded-${availableType}`) && param.goodId > 0) {\n config.get('/catalog/availableinfo/', param, 'html').then((response) => {\n const dropdown = goodAvailableObj.nextElementSibling;\n goodAvailableObj.classList.add(`was-loaded-${availableType}`);\n dropdown.innerHTML = response;\n\n const $dropdownMenu = goodAvailableObj.nextElementSibling;\n if ($dropdownMenu.querySelector('.btn-close') !== null) {\n const dropdownInstance = Dropdown.getOrCreateInstance(goodAvailableObj);\n const $dropdownIframe = $dropdownMenu.querySelector('iframe');\n $dropdownMenu.querySelector('.btn-close').addEventListener('click', () => {\n dropdownInstance.hide();\n if ($dropdownIframe !== null) {\n $dropdownIframe.remove();\n goodAvailableObj.classList.remove(`was-loaded-${availableType}`);\n }\n });\n }\n });\n }\n goodAvailableObj.addEventListener('hide.bs.dropdown', function(e) {\n goodAvailableObj.classList.remove(`was-loaded-${availableType}`);\n });\n};\n\nfunction initVideoBudget() {\n const $$smallVideoLoad = document.querySelectorAll('.js-smallVideoLoad');\n if ($$smallVideoLoad.length > 0) {\n $$smallVideoLoad.forEach((element) => {\n element.addEventListener('click', () => {\n const $badgeVideoContainer = document.querySelector('.dropdown-menu.show .js-videoContainer');\n const videoLink = element.dataset.smallVideoLink;\n const tpl = `
\n \n
\n `;\n $badgeVideoContainer.classList.add('videoContainer--open');\n $badgeVideoContainer.insertAdjacentHTML('beforeend', tpl);\n const videoContainerHeight = $badgeVideoContainer.offsetHeight+'px';\n document.querySelector('.dropdown-menu--video').style.height = videoContainerHeight;\n\n document.querySelector('.videoContainer__close').addEventListener('click', () => {\n $badgeVideoContainer.classList.remove('videoContainer--open');\n $badgeVideoContainer.innerHTML = '';\n document.querySelector('.dropdown-menu--video').style.height = 'auto';\n });\n });\n });\n }\n}\n","import {config} from 'core/config';\nimport Dropdown from 'bootstrap/js/dist/dropdown';\n\nexport function getBadgetInfo(badgetObj) {\n if (badgetObj.jquery !== undefined) badgetObj = $(badgetObj)[0];\n const badgetType = badgetObj.dataset.badget_type;\n if (badgetType === undefined) {\n return false;\n }\n const param = {\n badgetType: badgetType,\n goodId: badgetObj.dataset.item,\n type: badgetObj.dataset.object_type ? badgetObj.dataset.object_type : 'goGood',\n };\n if (!badgetObj.classList.contains(`was-loaded-${badgetType}`) && param.goodId > 0) {\n config.get('/catalog/badgetinfo/', param, 'html').then((response) => {\n const dropdown = badgetObj.nextElementSibling;\n badgetObj.classList.add(`was-loaded-${badgetType}`);\n dropdown.innerHTML = response;\n if (badgetObj.dataset.badget_type === 'video') {\n initVideoBudget();\n const videoDiv = dropdown.querySelectorAll('[data-video-id]');\n if (videoDiv.length > 0 && dropdown.classList.contains('show')) {\n videoDiv.forEach((element) => {\n const videoLink = element.dataset.videoLink;\n element.innerHTML = `\n
\n \n
\n `;\n });\n }\n }\n const $dropdownMenu = badgetObj.nextElementSibling;\n if ($dropdownMenu.querySelector('.btn-close') !== null) {\n const dropdownInstance = Dropdown.getOrCreateInstance(badgetObj);\n const $dropdownIframe = $dropdownMenu.querySelector('iframe');\n $dropdownMenu.querySelector('.btn-close').addEventListener('click', () => {\n dropdownInstance.hide();\n if ($dropdownIframe !== null) {\n $dropdownIframe.remove();\n badgetObj.classList.remove(`was-loaded-${badgetType}`);\n }\n });\n }\n });\n }\n badgetObj.addEventListener('hide.bs.dropdown', function(e) {\n badgetObj.classList.remove(`was-loaded-${badgetType}`);\n });\n};\n\nfunction initVideoBudget() {\n const $$smallVideoLoad = document.querySelectorAll('.js-smallVideoLoad');\n if ($$smallVideoLoad.length > 0) {\n $$smallVideoLoad.forEach((element) => {\n element.addEventListener('click', () => {\n const $badgeVideoContainer = document.querySelector('.dropdown-menu.show .js-videoContainer');\n const videoLink = element.dataset.smallVideoLink;\n const tpl = `
\n \n
\n `;\n $badgeVideoContainer.classList.add('videoContainer--open');\n $badgeVideoContainer.insertAdjacentHTML('beforeend', tpl);\n const videoContainerHeight = $badgeVideoContainer.offsetHeight+'px';\n document.querySelector('.dropdown-menu--video').style.height = videoContainerHeight;\n\n document.querySelector('.videoContainer__close').addEventListener('click', () => {\n $badgeVideoContainer.classList.remove('videoContainer--open');\n $badgeVideoContainer.innerHTML = '';\n document.querySelector('.dropdown-menu--video').style.height = 'auto';\n });\n });\n });\n }\n}\n","import './new.scss';\n\nexport const imagePopup = {\n init: () => {\n const $$imagesGallery = document.querySelectorAll('.js-images-gallery');\n if ($$imagesGallery.length > 0) {\n $$imagesGallery.forEach((gallery) => {\n const $$images = gallery.querySelectorAll('img');\n if ($$images.length > 0) {\n $$images.forEach((img) => imagePopup.bindEvents(img));\n }\n });\n }\n },\n bindEvents: (img) => {\n img.classList.add('c-pointer');\n img.addEventListener('click', () => imagePopup.zoomer(img));\n },\n zoomer: (element) => {\n const zoomer = document.createElement('div');\n const img = document.createElement('img');\n\n zoomer.classList.add('zoomer');\n zoomer.textContent = 'Загрузка';\n\n img.classList.add('zoomer-img');\n img.src = element.src.split('?')[0];\n\n document.body.prepend(zoomer);\n img.onload = function() {\n zoomer.textContent = '';\n zoomer.append(img);\n };\n\n zoomer.onclick = zoomer.remove;\n },\n};\n","import {config} from 'core/config';\nimport Modal from 'bootstrap/js/dist/modal';\n\nexport const modalAfterAddToCart = {\n config: {\n modalId: 'modalAfterAddToCart',\n },\n get: function() {\n let modal = document.querySelector('#'+ modalAfterAddToCart.config.modalId);\n if (modal === null) {\n const modalTemplate = `\n
\n
\n
\n
\n
\n `;\n document.body.insertAdjacentHTML('beforeend', modalTemplate);\n modal = document.querySelector('#'+ modalAfterAddToCart.config.modalId);\n }\n return modal;\n },\n setContent: function(content) {\n const modal = modalAfterAddToCart.get();\n modal.querySelector('.modal-content').innerHTML = content;\n },\n show: function() {\n const modalNode = Modal.getOrCreateInstance(this.get());\n modalNode.show();\n // this.get().modal('show');\n\n config.moveHeaderWhenModal(true);\n // document.querySelector(`#${this.config.modalId}`).on('hidden.bs.modal', function() {\n // config.moveHeaderWhenModal(false);\n // });\n },\n yaMetrika: function(){\n window.dataLayer = window.dataLayer || [];\n var products = [];\n document.querySelectorAll('meta.addToCartMeta').forEach((element) => {\n products.push({\n \"id\": element.getAttribute('data-id'),\n \"name\": element.getAttribute('data-name'),\n \"price\": element.getAttribute('data-price'),\n \"brand\": element.getAttribute('data-brand'),\n \"category\": element.getAttribute('data-category'),\n \"variant\": element.getAttribute('data-variant'),\n \"quantity\": element.getAttribute('data-quantity')\n })\n });\n window.dataLayer.push({\n \"ecommerce\": {\n \"currencyCode\": \"RUB\",\n \"add\": {\n \"products\": products\n }\n }\n });\n ym(32042756,'reachGoal','ORDER');\n }\n};\n","import './index.scss';\nimport { config } from 'core/config';\nimport { spinner } from 'modules/spinner';\n\nconst SELECT = {\n 'opinionForm': '.opinionForm',\n 'captcha': '#opinionCaptcha',\n 'captchaImg': '#opinionCaptchaImg',\n 'captchaRefresh': '.opinionCaptchaRefresh',\n 'driveStyle': 'input.opinionDriveStyle',\n 'message': '#opinionMessage',\n 'carMod': '#opinionModification',\n 'carYear': '#opinionYear',\n 'carModel': '#opinionModel',\n 'carMark': '#opinionMark',\n 'replyButton': 'button.replyButton',\n 'cancelButton': '.replyButtons .cancel',\n 'modalContent': '#modalGoodOpinion .modal-content',\n};\n\nexport const opinionForm = {\n init: function () {\n if (document.querySelector(SELECT.opinionForm) !== null) {\n this.bindEvent();\n }\n },\n bindEvent: function () {\n const $buttonCansel = document.querySelector(SELECT.cancelButton);\n const $buttonReply = document.querySelector(SELECT.replyButton);\n const $captchaRefresh = document.querySelector(SELECT.captchaRefresh);\n if ($buttonCansel) {\n document.querySelector(SELECT.cancelButton).addEventListener('click', function () {\n opinionForm.clearForm();\n });\n }\n if ($buttonReply) {\n document.querySelector(SELECT.replyButton).addEventListener('click', function () {\n if (this.classList.contains('cancel')) {\n return false;\n }\n spinner.show(document.querySelector(SELECT.modalContent));\n const params = opinionForm.collectFrom();\n config.get('/actionaddopinion/', params).then((answer) => {\n if (answer.result === true) {\n opinionForm.clearForm();\n }\n let message = '';\n if (answer.message.length) {\n answer.message.forEach(function (key, value) {\n message += value + '\\n';\n });\n if (message.includes('получен')) {\n document.querySelector(SELECT.modalContent).innerHTML = `\n
\n
\n \n ${answer.message}\n
\n \n
\n `;\n spinner.hide(document.querySelector(siteopinion.config.modalContent));\n return false;\n } else {\n alert(answer.message.join(\"\\n\"));\n spinner.hide(document.querySelector(SELECT.modalContent));\n }\n }\n \n const st = document.querySelectorAll('.opinionForm .is-invalid');\n for (let i = 0; i < st.length; i++) {\n st[i].classList.remove('is-invalid');\n }\n \n if (answer.objects.length) {\n answer.objects.forEach((selector) => {\n document.querySelector(selector).classList.add('is-invalid');\n });\n }\n });\n });\n }\n if ($captchaRefresh) {\n document.querySelector(SELECT.captchaRefresh).addEventListener('click', function () {\n opinionForm.refreshCaptcha();\n });\n }\n const $selectMark = document.querySelector(SELECT.carMark);\n const $selectModel = document.querySelector(SELECT.carModel);\n //const $selectYear = document.querySelector(SELECT.carYear);\n //const $selectMod = document.querySelector(SELECT.carMod);\n // выбор авто / марка\n $selectMark.addEventListener('change', function () {\n const selected = this.value;\n if (!selected) {\n $selectModel.disabled = true;\n $selectYear.disabled = true;\n $selectMod.disabled = true;\n config.setDropdown({}, $selectModel);\n config.setDropdown({}, $selectYear);\n config.setDropdown({}, $selectMod);\n return;\n }\n config.get('/index/callback/adaptiveGetModels.php', { '_id': selected, 'thread': 'tyres' }).then((answer) => {\n config.setDropdown(answer, $selectModel, true, false);\n $selectModel.disabled = false;\n });\n })\n /*\n // выбор авто / модель\n $selectModel.addEventListener('change', function () {\n const selected = this.value;\n if (!selected) {\n $selectYear.disabled = true;\n $selectMod.disabled = true;\n\n config.setDropdown({}, $selectYear);\n config.setDropdown({}, $selectMod);\n return;\n }\n config.get('/index/callback/adaptiveGetYears.php', { '_id': selected, 'thread': 'tyres' }).then((answer) => {\n config.setDropdown(answer, $selectYear, true, false, true);\n $selectYear.disabled = false;\n });\n }),\n // выбор авто / год\n $selectYear.addEventListener('change', function () {\n const year = this.value;\n const selected = $selectModel.value;\n if (!selected) {\n $selectMod.disabled = true;\n config.setDropdown({}, $selectMod);\n return;\n }\n config.get('/index/callback/adaptiveGetModifications.php',\n { 'year': year, '_id': selected, 'thread': 'tyres' }\n ).then((answer) => {\n config.setDropdown(answer, $selectMod, true, false);\n $selectMod.disabled = false;\n });\n });\n */\n },\n refreshCaptcha: function () {\n document.querySelector(SELECT.captchaImg).src = `/mods/kcaptcha/imgc.php?name=opinion&d=${new Date()}`;\n },\n clearForm: function () {\n opinionForm.refreshCaptcha();\n document.querySelector(SELECT.opinionForm).querySelectorAll('input, select').forEach((element) => {\n if ((element.type === 'checkbox' && element.checked) || (element.type === 'radio' && element.checked)) {\n element.checked = false;\n } else {\n if (element.type !== 'hidden') {\n element.value = '';\n }\n }\n });\n\n config.setDropdown({}, document.querySelector(SELECT.carModel), false, false);\n //config.setDropdown({}, document.querySelector(SELECT.carYear), false, false);\n //config.setDropdown({}, document.querySelector(SELECT.carMod), false, false);\n document.querySelector(SELECT.carModel).disabled = true;\n //document.querySelector(SELECT.carYear).disabled = true;\n //document.querySelector(SELECT.carMod).disabled = true;\n document.querySelector(SELECT.carMark).value = 0;\n document.querySelector(SELECT.message).value = '';\n document.querySelector('input[name=\"rating\"]').checked = true;\n },\n collectFrom: function () {\n return new FormData(document.querySelector(SELECT.opinionForm));\n },\n\n};\n","import './index.scss';\nimport {config} from 'core/config';\nimport Popover from 'bootstrap/js/dist/popover';\n\nexport const restListPopover = {\n init: function() {\n restListPopover.loadRests();\n restListPopover.initPopoverListener();\n },\n initPopoverListener: (target) => {\n let popoverOptions = {};\n\n if (window.innerWidth < config.breakpoints.md) {\n popoverOptions = {\n 'html': true,\n 'trigger': 'click',\n 'placement': 'auto',\n };\n } else {\n popoverOptions = {\n 'html': true,\n 'trigger': 'click',\n 'placement': 'right',\n 'fallbackPlacements': ['left', 'right'],\n };\n }\n\n const popoverTriggerList = document.querySelectorAll('.js-rest-list-popovers:not(.b-item--loaded) [data-bs-toggle=\"popover\"]');\n const popoverList = [...popoverTriggerList].map((popoverTriggerEl) => {\n new Popover(popoverTriggerEl, popoverOptions);\n\n popoverTriggerEl.addEventListener('show.bs.popover', (e) => {\n restListPopover.hideActivePopovers();\n });\n popoverTriggerEl.addEventListener('shown.bs.popover', (e) => {\n const $popoverBtn = e.target;\n $popoverBtn.classList.add('active');\n config.moveHeaderWhenModal(true);\n if (window.innerWidth > config.breakpoints.md) {\n document.body.classList.add('body-locked');\n }\n setTimeout(function () {\n const targetData = e.target.dataset;\n const localValue = 'popup-' + targetData.available_type + targetData.item;\n const $popoverHeader = document.querySelector('.available-popover .popover-header');\n const $popoverContent = document.querySelector('.available-popover .popover-body');\n\n if ($popoverHeader) {\n $popoverHeader.addEventListener('click', function (e) {\n document.body.classList.remove('body-locked');\n Popover.getInstance($popoverBtn).hide();\n config.moveHeaderWhenModal(false);\n });\n }\n\n if (localStorage.getItem(localValue) === null) {\n const param = {\n availableType: popoverTriggerEl.dataset.available_type,\n goodId: popoverTriggerEl.dataset.item,\n };\n config.get('/catalog/availableinfo/', param, 'html').then((response) => {\n $popoverContent.innerHTML = response;\n localStorage.setItem(localValue, response);\n Popover.getOrCreateInstance(e.target).update();\n });\n } else {\n $popoverContent.innerHTML = localStorage.getItem(localValue);\n }\n }, 200);\n });\n popoverTriggerEl.addEventListener('hide.bs.popover', (e) => {\n if (window.innerWidth > config.breakpoints.md) {\n document.body.classList.remove('body-locked');\n }\n });\n });\n },\n hideActivePopovers: () => {\n const popoverSelector = '.js-rest-list-popovers [data-bs-toggle=\"popover\"]';\n const $$popoverBtnActive = document.querySelectorAll(`${popoverSelector}.active`);\n if ($$popoverBtnActive.length > 0) {\n $$popoverBtnActive.forEach((el) => {\n Popover.getInstance(el).hide();\n el.classList.remove('active');\n });\n };\n },\n loadRests: () => {\n const ids = {};\n document.querySelectorAll('.js-rest-list-popovers.needrests').forEach((el) => {\n const id = el.getAttribute('itemId');\n ids[id] = id;\n });\n config.get('/catalog/availablesbygoods/', { 'goodIds': JSON.stringify(ids) }).then((response) => {\n if (response.length > 0) {\n response.forEach((goodInfo) => {\n const $$goodBlocks = document.querySelectorAll(`.js-rest-list-popovers[itemId=\"${goodInfo.good_id}\"]`);\n $$goodBlocks.forEach(($goodBlock) => {\n $goodBlock.classList.remove('needrests');\n if (goodInfo.stock) {\n $goodBlock.querySelector('.availabilityBlock.stockAvailability').setAttribute('data-available', goodInfo.maxStock);\n $goodBlock.querySelector('.availabilityBlock.stockAvailability .stockShopsCount').innerHTML = goodInfo.stock;\n $goodBlock.querySelector('.availabilityBlock.stockAvailability .stockShopsNames').innerHTML = goodInfo.pointNameStock;\n } else {\n $goodBlock.querySelector('.availabilityBlock.stockAvailability').classList.add('d-none');\n }\n if (goodInfo.delivery) {\n $goodBlock.querySelector('.availabilityBlock.deliveryAvailability').setAttribute('data-available', goodInfo.maxDelivery);\n $goodBlock.querySelector('.availabilityBlock.deliveryAvailability .deliveryShopsCount').innerHTML = goodInfo.delivery;\n $goodBlock.querySelector('.availabilityBlock.deliveryAvailability .deliveryLength').innerHTML = goodInfo.minDeliveryLogist;\n $goodBlock.querySelector('.availabilityBlock.deliveryAvailability .deliveryShopsNames').innerHTML = goodInfo.pointNameDelivery;\n $goodBlock.querySelector('.availabilityBlock.deliveryAvailability .deliveryLengthNames').innerHTML = goodInfo.daysNameDelivery;\n } else {\n $goodBlock.querySelector('.availabilityBlock.deliveryAvailability').classList.add('d-none');\n }\n if (goodInfo.tk) {\n $goodBlock.querySelector('.availabilityBlock.tkAvailability').setAttribute('data-available', goodInfo.maxTk);\n $goodBlock.querySelector('.availabilityBlock.tkAvailability .tkShopsCount').innerHTML = goodInfo.tk;\n $goodBlock.querySelector('.availabilityBlock.tkAvailability .tkLength').innerHTML = goodInfo.minTkLogist;\n $goodBlock.querySelector('.availabilityBlock.tkAvailability .tkShopsNames').innerHTML = goodInfo.pointNameTK;\n $goodBlock.querySelector('.availabilityBlock.tkAvailability .tkLengthNames').innerHTML = goodInfo.daysNameTK;\n } else {\n $goodBlock.querySelector('.availabilityBlock.tkAvailability').classList.add('d-none');\n }\n });\n });\n }\n });\n },\n};\n","/*!\n * Bootstrap popover.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./tooltip.js'), require('./util/index.js')) :\n typeof define === 'function' && define.amd ? define(['./tooltip', './util/index'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Tooltip, global.Index));\n})(this, (function (Tooltip, index_js) { 'use strict';\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n /**\n * Constants\n */\n\n const NAME = 'popover';\n const SELECTOR_TITLE = '.popover-header';\n const SELECTOR_CONTENT = '.popover-body';\n const Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' + '
' + '

' + '
' + '
',\n trigger: 'click'\n };\n const DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n };\n\n /**\n * Class definition\n */\n\n class Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n }\n\n /**\n * jQuery\n */\n\n index_js.defineJQueryPlugin(Popover);\n\n return Popover;\n\n}));\n//# sourceMappingURL=popover.js.map\n","/*!\n * Bootstrap tab.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :\n typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Index));\n})(this, (function (BaseComponent, EventHandler, SelectorEngine, index_js) { 'use strict';\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n /**\n * Constants\n */\n\n const NAME = 'tab';\n const DATA_KEY = 'bs.tab';\n const EVENT_KEY = `.${DATA_KEY}`;\n const EVENT_HIDE = `hide${EVENT_KEY}`;\n const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n const EVENT_SHOW = `show${EVENT_KEY}`;\n const EVENT_SHOWN = `shown${EVENT_KEY}`;\n const EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;\n const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\n const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;\n const ARROW_LEFT_KEY = 'ArrowLeft';\n const ARROW_RIGHT_KEY = 'ArrowRight';\n const ARROW_UP_KEY = 'ArrowUp';\n const ARROW_DOWN_KEY = 'ArrowDown';\n const HOME_KEY = 'Home';\n const END_KEY = 'End';\n const CLASS_NAME_ACTIVE = 'active';\n const CLASS_NAME_FADE = 'fade';\n const CLASS_NAME_SHOW = 'show';\n const CLASS_DROPDOWN = 'dropdown';\n const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\n const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n const SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\n const SELECTOR_OUTER = '.nav-item, .list-group-item';\n const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\n const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\n const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n /**\n * Class definition\n */\n\n class Tab extends BaseComponent {\n constructor(element) {\n super(element);\n this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n if (!this._parent) {\n return;\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren());\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE, {\n relatedTarget: innerElem\n }) : null;\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, {\n relatedTarget: active\n });\n if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n return;\n }\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.add(CLASS_NAME_ACTIVE);\n this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW);\n return;\n }\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n }\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW);\n return;\n }\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n }\n _keydown(event) {\n if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n return;\n }\n event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault();\n const children = this._getChildren().filter(element => !index_js.isDisabled(element));\n let nextActiveElement;\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n nextActiveElement = index_js.getNextActiveElement(children, event.target, isNext, true);\n }\n if (nextActiveElement) {\n nextActiveElement.focus({\n preventScroll: true\n });\n Tab.getOrCreateInstance(nextActiveElement).show();\n }\n }\n _getChildren() {\n // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n }\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null;\n }\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist');\n for (const child of children) {\n this._setInitialAttributesOnChild(child);\n }\n }\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child);\n const isActive = this._elemIsActive(child);\n const outerElem = this._getOuterElement(child);\n child.setAttribute('aria-selected', isActive);\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n }\n if (!isActive) {\n child.setAttribute('tabindex', '-1');\n }\n this._setAttributeIfNotExists(child, 'role', 'tab');\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child);\n }\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child);\n if (!target) {\n return;\n }\n this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n }\n }\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element);\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return;\n }\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem);\n if (element) {\n element.classList.toggle(className, open);\n }\n };\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);\n outerElem.setAttribute('aria-expanded', open);\n }\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value);\n }\n }\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n }\n\n /**\n * Data API implementation\n */\n\n EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (index_js.isDisabled(this)) {\n return;\n }\n Tab.getOrCreateInstance(this).show();\n });\n\n /**\n * Initialize on focus\n */\n EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element);\n }\n });\n /**\n * jQuery\n */\n\n index_js.defineJQueryPlugin(Tab);\n\n return Tab;\n\n}));\n//# sourceMappingURL=tab.js.map\n","/*!\n * Bootstrap tooltip.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./util/index.js'), require('./util/sanitizer.js'), require('./util/template-factory.js')) :\n typeof define === 'function' && define.amd ? define(['@popperjs/core', './base-component', './dom/event-handler', './dom/manipulator', './util/index', './util/sanitizer', './util/template-factory'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global[\"@popperjs/core\"], global.BaseComponent, global.EventHandler, global.Manipulator, global.Index, global.Sanitizer, global.TemplateFactory));\n})(this, (function (Popper, BaseComponent, EventHandler, Manipulator, index_js, sanitizer_js, TemplateFactory) { 'use strict';\n\n function _interopNamespaceDefault(e) {\n const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });\n if (e) {\n for (const k in e) {\n if (k !== 'default') {\n const d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: () => e[k]\n });\n }\n }\n }\n n.default = e;\n return Object.freeze(n);\n }\n\n const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n /**\n * Constants\n */\n\n const NAME = 'tooltip';\n const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n const CLASS_NAME_FADE = 'fade';\n const CLASS_NAME_MODAL = 'modal';\n const CLASS_NAME_SHOW = 'show';\n const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n const EVENT_MODAL_HIDE = 'hide.bs.modal';\n const TRIGGER_HOVER = 'hover';\n const TRIGGER_FOCUS = 'focus';\n const TRIGGER_CLICK = 'click';\n const TRIGGER_MANUAL = 'manual';\n const EVENT_HIDE = 'hide';\n const EVENT_HIDDEN = 'hidden';\n const EVENT_SHOW = 'show';\n const EVENT_SHOWN = 'shown';\n const EVENT_INSERTED = 'inserted';\n const EVENT_CLICK = 'click';\n const EVENT_FOCUSIN = 'focusin';\n const EVENT_FOCUSOUT = 'focusout';\n const EVENT_MOUSEENTER = 'mouseenter';\n const EVENT_MOUSELEAVE = 'mouseleave';\n const AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: index_js.isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: index_js.isRTL() ? 'right' : 'left'\n };\n const Default = {\n allowList: sanitizer_js.DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' + '
' + '
' + '
',\n title: '',\n trigger: 'hover focus'\n };\n const DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n };\n\n /**\n * Class definition\n */\n\n class Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper__namespace === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));\n const shadowRoot = index_js.findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', index_js.noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', index_js.noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = index_js.getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);\n }\n _createPopper(tip) {\n const placement = index_js.execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return index_js.execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : index_js.getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n }\n\n /**\n * jQuery\n */\n\n index_js.defineJQueryPlugin(Tooltip);\n\n return Tooltip;\n\n}));\n//# sourceMappingURL=tooltip.js.map\n","/*!\n * Bootstrap sanitizer.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Sanitizer = {}));\n})(this, (function (exports) { 'use strict';\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n // js-docs-start allow-list\n const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n };\n // js-docs-end allow-list\n\n const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n /**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n // eslint-disable-next-line unicorn/better-regex\n const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n const allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n };\n function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n }\n\n exports.DefaultAllowlist = DefaultAllowlist;\n exports.sanitizeHtml = sanitizeHtml;\n\n Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\n}));\n//# sourceMappingURL=sanitizer.js.map\n","/*!\n * Bootstrap template-factory.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/selector-engine.js'), require('./config.js'), require('./sanitizer.js'), require('./index.js')) :\n typeof define === 'function' && define.amd ? define(['../dom/selector-engine', './config', './sanitizer', './index'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TemplateFactory = factory(global.SelectorEngine, global.Config, global.Sanitizer, global.Index));\n})(this, (function (SelectorEngine, Config, sanitizer_js, index_js) { 'use strict';\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n /**\n * Constants\n */\n\n const NAME = 'TemplateFactory';\n const Default = {\n allowList: sanitizer_js.DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n };\n const DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n };\n const DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n };\n\n /**\n * Class definition\n */\n\n class TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (index_js.isElement(content)) {\n this._putElementInTemplate(index_js.getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizer_js.sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return index_js.execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n }\n\n return TemplateFactory;\n\n}));\n//# sourceMappingURL=template-factory.js.map\n","import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { a as elementParents, b as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\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 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 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;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.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 for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\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 inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\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 if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\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}\n\nexport { Keyboard as default };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { f as elementOuterSize, g as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\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 paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const realIndex = swiper.realIndex;\n const newSlideIndex = swiper.getSlideIndexByData(index);\n const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);\n if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {\n const indexBeforeLoopFix = swiper.activeIndex;\n swiper.loopFix({\n direction: newSlideIndex > currentSlideIndex ? 'next' : 'prev',\n activeSlideIndex: newSlideIndex,\n slideTo: false\n });\n const indexAfterFix = swiper.activeIndex;\n if (indexBeforeLoopFix === indexAfterFix) {\n swiper.slideToLoop(realIndex, 0, false, true);\n }\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\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 let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\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 if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\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.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](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 let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\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 // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\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 if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\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;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](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 el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(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[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, a as elementParents, b as elementOffset, h as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\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 fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\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 set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\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 = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\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 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 if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\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.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\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;\n\n // Fix duration\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;\n // Define if we need image drag\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.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${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 if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.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 if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\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();\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}\n\nexport { Zoom as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { j as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\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 function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\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 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 swiper.thumbs.swiper.update();\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 swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\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) ;\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}\n\nexport { Thumb as default };\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, elementIndex as g, getTranslate as h, elementTransitionEnd as i, isObject as j, getSlideTransformEl as k, elementStyle as l, elementNextAll as m, nextTick as n, elementPrevAll as o, animateCSSModeScroll as p, extend as q, deleteProps as r, setCSSProperty as s };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, l as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, m as elementNextAll, o as elementPrevAll, h as getTranslate, p as animateCSSModeScroll, n as nextTick, d as now, q as extend, g as elementIndex, c as createElement, r as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n 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 Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = e.closest(`.${params.slideClass}, swiper-slide`);\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\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 if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\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 let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n 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 if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n if (!data.isMoved) {\n if (isLoop) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(event.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(event.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (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 }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n if (directionChanged && initialized) {\n swiper.changeDirection();\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 if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n 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\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === 'SWIPER-CONTAINER') {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n"],"names":["gallery360","$modal360","document","querySelector","addEventListener","require","classList","add","window","CI360","init","sliderSimilarGoods","Swiper","slidesPerView","spaceBetween","modules","Navigation","navigation","nextEl","prevEl","on","sliderMove","e","galleryEdgeGradient","slideChange","breakpoints","element","isBeginning","el","remove","isEnd","goodTabs","opinionsPage","opinionsYear","config","videoTabId","opinionsRow","opinionsButton","descriptionTabId","this","bindEvents","processHash","initSearchBarModel","$opinionsButton","querySelectorAll","length","pageVal","searchOpinions","page","year","$loaderBlock","spinner","request","link","controllerConfigHead","get","$opinionsRow","then","response","innerHTML","insertAdjacentHTML","dataset","count","hidden","forEach","cl","opinionId","$$VideoImgPlay","videoLink","Array","from","event","preventDefault","history","pushState","target","id","location","hash","tabId","openTab","scrollToTab","substring","replace","tabInstanse","Tab","show","$scrollElement","scrollIntoView","block","behavior","$searchBarSizes","$modelResults","$$modelResultsGroups","$modelResultsAlter","handleSearchSubmit","fd","FormData","tsh","tprof","td","$$resultItems","size","header","previousElementSibling","textContent","result","template","lazyload","searchFormGet","currentIndex","$$slides","showSlide","index","slide","style","display","nextSlide","interval","setInterval","clearInterval","GoGoodsPageCartWidget","stringToInt","string","trim","priceFormat","integer","toString","constructor","$root","that","setElementsInstance","cost","elementsInstance","goodPrice","innerText","finalCost","initialSumInCart","priceTotal","decrement","increment","goodCount","value","parseInt","rest","nInputConst","checkSum","checkQuickOrder","addToCartButton","$form","closest","goodId","goGoodId","answer","common","cartHead","reloadCarts","modalAfterAddToCart","disabled","metricaModule","quickOrderForm","$modalQuick","quickFormData","pair","entries","console","log","params","error","key","Object","keys","message","url","href","setTimeout","alert","quickOrderButton","inputCount","dataRest","priceTotalSum","parseFloat","btnPodeli","podeliWidget","contains","CartWidget","getElementById","total","minLimit","maxLimit","selectorToInject","availablenotk","goGoodsPageCart","widget","restOfGood","SELF_GROUP","restListPopover","sizePrices","onclick","getAvailableInfo","widgets","data","ids","formData","widgetGroups","logistDay","append","currentWidgetGroup","group","push","filter","item","indexOf","hasOwnProperty","hide","parentNode","countInCard","widgetCost","widgetTotal","icon","aviable","text","instock","imageZoomer","imagePopup","imageZoom","IMG","RESULT","LENS","createElement","moveLens","cx","offsetWidth","cy","offsetHeight","backgroundImage","src","split","backgroundSize","width","height","opacity","pos","x","y","a","getBoundingClientRect","pageX","left","pageY","top","pageXOffset","pageYOffset","getCursorPos","backgroundPosition","parentElement","insertBefore","sliderGoodsImg","initSwiper","initLightBox","$target","$swiperWrapper","$gal","cloneNode","$img","$preloader","removeAttribute","$lightBox","$prevButton","$nextButton","body","galleryLightbox","Zoom","Pagination","Keyboard","loop","lazy","autoHeight","initialSlide","active","zoom","keyboard","enabled","onlyInViewport","pagination","updateButtonStates","totalSlides","slides","activeIndex","stopPropagation","slidePrev","slideNext","tagName","destroy","galleryThumbs","watchSlidesVisibility","watchSlidesProgress","galleryTop","Thumbs","thumbs","swiper","visibleSlidesIndexes","slideTo","$offsetHeight","newWidth","complete","originalWidth","getAttribute","newHeight","Math","trunc","min","$lightbox","modelController","compareHead","flipbox","opinionForm","initVideoLinks","initPopovers","widgetPodeli","initFullDescriptionLink","map","popoverTriggerEl","Popover","$$badget","badget_type","getBadgetInfo","$quickModal","grecaptcha","callMe","phoneMask","allVideoLink","onelVideoLink","$modelControllerVideo","videoId","modelControllerLink","totalPriceEl","SELECT","$addTofavorites","removeGoodFromCompare","addGoodToCompare","setCompareStatus","update","$compareHead","$comparHeadName","$comparHeadCount","$comparHeadAction","name","action","templateCompareHead","cookie","gogoods_id","updateInHead","$headCount","count_goods","values","goods","innerWidth","mobileCompare","mobileLinkCompareVal","appendChild","$goodLink","$goodItem","title","toggle","goodAvailableObj","undefined","jquery","$","availableType","available_type","param","dropdown","nextElementSibling","$dropdownMenu","dropdownInstance","Dropdown","$dropdownIframe","badgetObj","badgetType","type","object_type","$$smallVideoLoad","$badgeVideoContainer","smallVideoLink","tpl","videoContainerHeight","initVideoBudget","videoDiv","$$imagesGallery","gallery","$$images","img","zoomer","prepend","onload","modalId","modal","modalTemplate","setContent","content","Modal","yaMetrika","dataLayer","products","ym","bindEvent","$buttonCansel","$buttonReply","$captchaRefresh","clearForm","collectFrom","includes","siteopinion","modalContent","join","st","i","objects","selector","refreshCaptcha","$selectMark","$selectModel","selected","$selectYear","$selectMod","Date","checked","loadRests","initPopoverListener","popoverOptions","hideActivePopovers","$popoverBtn","targetData","localValue","$popoverHeader","$popoverContent","localStorage","getItem","setItem","$$popoverBtnActive","JSON","stringify","goodInfo","good_id","$goodBlock","stock","setAttribute","maxStock","pointNameStock","delivery","maxDelivery","minDeliveryLogist","pointNameDelivery","daysNameDelivery","tk","maxTk","minTkLogist","pointNameTK","daysNameTK","module","exports","Tooltip","index_js","NAME","SELECTOR_TITLE","SELECTOR_CONTENT","Default","offset","placement","trigger","DefaultType","_isWithContent","_getTitle","_getContent","_getContentForTemplate","_resolvePossibleFunction","_config","static","each","getOrCreateInstance","TypeError","defineJQueryPlugin","factory","BaseComponent","EventHandler","SelectorEngine","EVENT_KEY","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","EVENT_KEYDOWN","EVENT_LOAD_DATA_API","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","HOME_KEY","END_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","super","_parent","_element","_setInitialAttributes","_getChildren","_keydown","innerElem","_elemIsActive","_getActiveElem","hideEvent","relatedTarget","defaultPrevented","_deactivate","_activate","relatedElem","getElementFromSelector","_toggleDropDown","_queueCallback","blur","children","isDisabled","nextActiveElement","isNext","getNextActiveElement","focus","preventScroll","find","child","parent","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","className","findOne","attribute","hasAttribute","elem","matches","startsWith","Popper","Manipulator","sanitizer_js","TemplateFactory","_interopNamespaceDefault","n","create","Symbol","toStringTag","k","d","getOwnPropertyDescriptor","defineProperty","enumerable","default","freeze","Popper__namespace","DISALLOWED_ATTRIBUTES","Set","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","AttachmentMap","AUTO","TOP","RIGHT","isRTL","BOTTOM","LEFT","allowList","DefaultAllowlist","animation","boundary","container","customClass","delay","fallbackPlacements","html","popperConfig","sanitize","sanitizeFn","_isEnabled","_timeout","_isHovered","_activeTrigger","_popper","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_isShown","_leave","_enter","dispose","clearTimeout","off","_hideModalHandler","_disposePopper","Error","showEvent","eventName","isInTheDom","findShadowRoot","ownerDocument","documentElement","_getTipElement","_createPopper","concat","noop","_isAnimated","_isWithActiveTrigger","Boolean","_createTipElement","_getTemplateFactory","toHtml","tipId","getUID","changeContent","extraClass","_initializeOnDelegatedTarget","delegateTarget","_getDelegateConfig","execute","attachment","toUpperCase","createPopper","_getPopperConfig","_getOffset","Number","popperData","arg","defaultBsPopperConfig","modifiers","options","phase","fn","state","triggers","eventIn","eventOut","context","_setTimeout","handler","timeout","_getConfig","dataAttributes","getDataAttributes","dataAttribute","has","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","getElement","area","b","br","col","code","dd","div","dl","dt","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeName","toLowerCase","test","nodeValue","attributeRegex","RegExp","some","regex","sanitizeHtml","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elements","elementName","attributeList","attributes","allowedAttributes","Config","DefaultContentType","entry","getContent","hasContent","_checkContent","templateWrapper","_maybeSanitize","_setContent","templateElement","isElement","_putElementInTemplate","_ref","extendParams","emit","g","handle","rtlTranslate","rtl","originalEvent","kc","keyCode","charCode","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","allowSlideNext","isHorizontal","isVertical","allowSlidePrev","shiftKey","altKey","ctrlKey","metaKey","activeElement","inView","slideClass","slideActiveClass","swiperWidth","clientWidth","swiperHeight","clientHeight","windowWidth","windowHeight","innerHeight","swiperOffset","scrollLeft","swiperCoord","point","returnValue","removeEventListener","assign","originalParams","checkProps","createElements","auto","c","hideOnClick","disabledClass","hiddenClass","lockClass","navigationDisabledClass","makeElementsArray","isArray","getEl","res","uniqueNavElements","toggleEl","subEl","watchOverflow","isLocked","rewind","onPrevClick","onNextClick","initButton","dir","destroyButton","_s","targetEl","clickable","isHidden","classes","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","position","onBulletClick","slidesPerGroup","realIndex","newSlideIndex","getSlideIndexByData","currentSlideIndex","loopedSlides","indexBeforeLoopFix","loopFix","direction","activeSlideIndex","slideToLoop","current","previousIndex","slidesLength","virtual","ceil","snapGrid","previousRealIndex","floor","snapIndex","previousSnapIndex","firstIndex","lastIndex","midIndex","max","classesToRemove","suffix","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","transform","transitionDuration","speed","render","paginationHTML","numberOfBullets","freeMode","call","maxRatio","minRatio","containerClass","zoomedSlideClass","fakeGestureTouched","fakeGestureMoved","currentScale","isScaling","evCache","gesture","originX","originY","slideEl","slideWidth","slideHeight","imageEl","imageWrapEl","image","isTouched","isMoved","currentX","currentY","minX","minY","maxX","maxY","startX","startY","touchesStart","touchesCurrent","velocity","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","sqrt","eventWithinSlide","slideSelector","onGestureStart","pointerType","splice","scaleStart","box","getScaleOrigin","onGestureChange","pointerIndex","findIndex","cachedEv","pointerId","scaleMove","onGestureEnd","onTouchMove","hostEl","containerEl","eventWithinZoomContainer","scaledWidth","scaledHeight","abs","allowClick","cancelable","scaleRatio","now","onTransitionEnd","zoomIn","slidesEl","touchX","touchY","offsetX","offsetY","diffX","diffY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","cssMode","wrapperEl","overflow","touchAction","forceZoomRatio","scrollX","scrollY","zoomOut","zoomToggle","getListeners","passiveListener","passiveListeners","passive","capture","activeListenerWithCapture","set","device","android","onTouchStart","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","onTouchEnd","animating","in","out","Thumb","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","initialized","swiperCreated","onThumbClick","thumbsSwiper","destroyed","clickedIndex","clickedSlide","slideToIndex","thumbsParams","SwiperClass","slideToClickedSlide","thumbsSwiperParams","initial","slidesPerViewDynamic","thumbsToActivate","thumbActiveClass","centeredSlides","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","HTMLElement","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","detail","watchForThumbsToAppear","requestAnimationFrame","duration","setTransition","isObject","obj","extend","ssrDocument","createEvent","initEvent","childNodes","getElementsByTagName","createElementNS","importNode","host","hostname","origin","pathname","protocol","search","getDocument","doc","ssrWindow","navigator","userAgent","replaceState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","matchMedia","callback","cancelAnimationFrame","getWindow","win","deleteProps","object","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","o","prototype","slice","isNode","node","nodeType","to","arguments","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","targetPosition","side","startPosition","translate","time","startTime","scrollSnapType","cssModeFrameID","isOutOfBound","animate","getTime","progress","easeProgress","cos","PI","currentPosition","scrollTo","elementChildren","tag","elementOffset","clientTop","clientLeft","scrollTop","elementPrevAll","prevEls","prev","elementNextAll","nextEls","next","elementStyle","prop","elementIndex","previousSibling","elementParents","parents","elementOuterSize","includeMargins","support","deviceCached","browser","getSupport","smoothScroll","touch","DocumentTouch","calcSupport","getDevice","overrides","_temp","platform","ua","ios","screenWidth","screenHeight","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","needPerspectiveFix","isSafari","String","major","minor","num","isWebView","calcBrowser","eventsEmitter","events","priority","self","eventsListeners","method","once","onceHandler","__emitterProxy","_len","args","_key","apply","onAny","eventsAnyListeners","offAny","eventHandler","_len2","_key2","unshift","processLazyPreloader","lazyEl","lazyPreloaderClass","shadowRoot","unlazy","preload","amount","lazyPreloadPrevNext","grid","rows","activeColumn","preloadColumns","_","column","slideIndexLastInView","updateSize","isNaN","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","gridEnabled","slideSize","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","swiperSlideSize","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","addToSnapGrid","addToSlidesGrid","v","checkOverflow","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","getSlideByIndex","visibleSlides","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","slideVisibleClass","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","updateSlidesClasses","getFilteredSlide","activeSlide","slideNextClass","slidePrevClass","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","runCallbacksOnInit","updateClickedSlide","slideFound","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","previousTranslate","translateTo","runCallbacks","translateBounds","internal","preventInteractionOnTransition","newTranslate","isH","onTranslateToWrapperTransitionEnd","transitionEmit","step","normalizedTranslate","normalizedGrid","normalizedGridNext","transitionStart","transitionEnd","t","_immediateVirtual","_cssModeVirtualInitialSet","onSlideToWrapperTransitionEnd","newIndex","perGroup","slidesPerGroupAuto","loopPreventsSliding","_clientLeft","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","getSlideIndex","loopCreate","slideRealIndex","byMousewheel","prependSlidesIndexes","appendSlidesIndexes","isPrev","slidesPrepended","slidesAppended","swiperLoopMoveDOM","recalcSlides","currentSlideTranslate","diff","touches","touchEventsData","controller","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","simulateTouch","touchEventsTarget","which","button","swipingClassHasValue","noSwipingClass","eventPath","composedPath","path","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","closestElement","swipeHandler","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","targetTouch","preventedByNestedSwiper","prevX","prevY","touchReleaseOnEdges","targetTouches","touchAngle","atan2","touchMoveStopPropagation","nested","touchesDiff","previousX","previousY","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","startTranslate","evt","bubbles","dispatchEvent","allowMomentumBounce","grabCursor","setGrabCursor","loopFixed","disableParentSwiper","resistanceRatio","resistance","followFinger","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","resizeTimeout","resume","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","onLoad","dummyEventAttached","dummyEventListener","domMethod","swiperMethod","updateOnWindowResize","isGridEnabled","defaults","resizeObserver","breakpointsBase","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","prototypes","transition","transitionDelay","moving","__preventObserver__","cursor","unsetGrabCursor","attachEvents","bind","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","changeDirection","isEnabled","currentHeight","points","substr","sort","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","prefix","resultClasses","prepareClasses","removeClasses","extendedDefaults","swipers","newParams","__modules__","mod","swiperParams","passedParams","clickTimeout","velocities","imagesToLoad","imagesLoaded","setProgress","cls","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","getWrapperSelector","getWrapper","slideSlots","lazyElements","deleteInstance","cleanStyles","newDefaults","m","installModule","prototypeGroup","protoMethod","use","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect"],"sourceRoot":""}