@skodaflow/web-library 8.4.0 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/carousel/Autoplay.js.map +1 -1
- package/cjs/components/carousel/Carousel.js +1 -1
- package/cjs/components/carousel/Carousel.js.map +1 -1
- package/cjs/components/carousel/Navigation.js +1 -1
- package/cjs/components/carousel/Navigation.js.map +1 -1
- package/cjs/components/carousel/Pagination.js +1 -1
- package/cjs/components/carousel/Pagination.js.map +1 -1
- package/cjs/components/header/Header.js +1 -1
- package/cjs/components/header/Header.js.map +1 -1
- package/cjs/components/header/HeaderNavigationHero.js +1 -1
- package/cjs/components/header/HeaderNavigationHero.js.map +1 -1
- package/cjs/components/header/HeaderNavigationMenu.js +1 -1
- package/cjs/components/header/HeaderNavigationMenu.js.map +1 -1
- package/cjs/components/hotspotCard/HotspotCard.js +1 -1
- package/cjs/components/hotspotCard/HotspotCard.js.map +1 -1
- package/cjs/components/icon/stroke/EmissionLabelIcon.js.map +1 -1
- package/cjs/components/image/Image.d.ts +38 -14
- package/cjs/components/image/Image.js +1 -1
- package/cjs/components/image/Image.js.map +1 -1
- package/cjs/components/index.d.ts +1 -0
- package/cjs/components/label/Label.js.map +1 -1
- package/cjs/components/overlay/Overlay.js +1 -1
- package/cjs/components/overlay/Overlay.js.map +1 -1
- package/cjs/components/video/Video.d.ts +9 -8
- package/cjs/components/video/Video.js +1 -1
- package/cjs/components/video/Video.js.map +1 -1
- package/cjs/components/video/index.d.ts +5 -1
- package/cjs/components/video/useVideoFullscreen.d.ts +13 -0
- package/cjs/components/video/useVideoFullscreen.js +2 -0
- package/cjs/components/video/useVideoFullscreen.js.map +1 -0
- package/cjs/components/video/useVideoPlayPause.d.ts +13 -0
- package/cjs/components/video/useVideoPlayPause.js +2 -0
- package/cjs/components/video/useVideoPlayPause.js.map +1 -0
- package/cjs/components/video/useVideoReady.d.ts +6 -0
- package/cjs/components/video/useVideoReady.js +2 -0
- package/cjs/components/video/useVideoReady.js.map +1 -0
- package/cjs/components/video/useVideoSoundControls.d.ts +17 -0
- package/cjs/components/video/useVideoSoundControls.js +2 -0
- package/cjs/components/video/useVideoSoundControls.js.map +1 -0
- package/cjs/components/video/useVideoTime.d.ts +22 -0
- package/cjs/components/video/useVideoTime.js +2 -0
- package/cjs/components/video/useVideoTime.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayer.d.ts +125 -0
- package/cjs/components/videoPlayer/VideoPlayer.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayer.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayerFullscreenButton.d.ts +31 -0
- package/cjs/components/videoPlayer/VideoPlayerFullscreenButton.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayerFullscreenButton.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayerIconButton.d.ts +16 -0
- package/cjs/components/videoPlayer/VideoPlayerIconButton.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayerIconButton.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayerPlayPauseButton.d.ts +31 -0
- package/cjs/components/videoPlayer/VideoPlayerPlayPauseButton.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayerPlayPauseButton.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayerSkipButton.d.ts +23 -0
- package/cjs/components/videoPlayer/VideoPlayerSkipButton.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayerSkipButton.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayerSlider.d.ts +12 -0
- package/cjs/components/videoPlayer/VideoPlayerSlider.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayerSlider.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayerSoundButton.d.ts +31 -0
- package/cjs/components/videoPlayer/VideoPlayerSoundButton.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayerSoundButton.js.map +1 -0
- package/cjs/components/videoPlayer/VideoPlayerTime.d.ts +17 -0
- package/cjs/components/videoPlayer/VideoPlayerTime.js +2 -0
- package/cjs/components/videoPlayer/VideoPlayerTime.js.map +1 -0
- package/cjs/components/videoPlayer/formatVideoTime.d.ts +5 -0
- package/cjs/components/videoPlayer/formatVideoTime.js +2 -0
- package/cjs/components/videoPlayer/formatVideoTime.js.map +1 -0
- package/cjs/components/videoPlayer/index.d.ts +10 -0
- package/cjs/components/videoPlayer/useVideoPlayerVisibility.d.ts +24 -0
- package/cjs/components/videoPlayer/useVideoPlayerVisibility.js +2 -0
- package/cjs/components/videoPlayer/useVideoPlayerVisibility.js.map +1 -0
- package/cjs/index.js +1 -1
- package/cjs/materialui/accordion/AccordionSummaryExpandWrapper.d.ts +5 -1
- package/cjs/materialui/accordion/AccordionSummaryExpandWrapper.js +1 -1
- package/cjs/materialui/accordion/AccordionSummaryExpandWrapper.js.map +1 -1
- package/cjs/materialui/alert/alertTitle.theme.js.map +1 -1
- package/cjs/materialui/card/Card.js.map +1 -1
- package/cjs/materialui/card/card.theme.js +1 -1
- package/cjs/materialui/card/card.theme.js.map +1 -1
- package/cjs/materialui/divider/divider.theme.js +1 -1
- package/cjs/materialui/divider/divider.theme.js.map +1 -1
- package/cjs/materialui/skeleton/skeleton.theme.js +1 -1
- package/cjs/materialui/skeleton/skeleton.theme.js.map +1 -1
- package/cjs/materialui/slider/slider.theme.js +1 -1
- package/cjs/materialui/slider/slider.theme.js.map +1 -1
- package/cjs/materialui/table/tablePagination.theme.js.map +1 -1
- package/cjs/materialui/tabs/Tab.d.ts +1 -0
- package/cjs/materialui/tabs/Tab.js +1 -1
- package/cjs/materialui/tabs/Tab.js.map +1 -1
- package/cjs/materialui/tabs/TabsScrollButton.d.ts +3 -1
- package/cjs/materialui/tabs/TabsScrollButton.js +1 -1
- package/cjs/materialui/tabs/TabsScrollButton.js.map +1 -1
- package/cjs/materialui/textfield/FormControl.js +1 -1
- package/cjs/materialui/textfield/FormControl.js.map +1 -1
- package/cjs/materialui/textfield/FormHelperText.js +1 -1
- package/cjs/materialui/textfield/FormHelperText.js.map +1 -1
- package/cjs/materialui/theme/sxConfig.js.map +1 -1
- package/cjs/materialui/theme/theme.extensions.d.ts +29 -0
- package/cjs/node_modules/swiper/modules/a11y.js +2 -0
- package/cjs/node_modules/swiper/modules/a11y.js.map +1 -0
- package/cjs/node_modules/swiper/modules/autoplay.js +1 -1
- package/cjs/node_modules/swiper/modules/autoplay.js.map +1 -1
- package/cjs/node_modules/swiper/modules/effect-fade.js +1 -1
- package/cjs/node_modules/swiper/modules/effect-fade.js.map +1 -1
- package/cjs/node_modules/swiper/modules/keyboard.js +1 -1
- package/cjs/node_modules/swiper/modules/keyboard.js.map +1 -1
- package/cjs/node_modules/swiper/modules/parallax.js +1 -1
- package/cjs/node_modules/swiper/modules/parallax.js.map +1 -1
- package/cjs/node_modules/swiper/shared/classes-to-selector.js +2 -0
- package/cjs/node_modules/swiper/shared/classes-to-selector.js.map +1 -0
- package/cjs/node_modules/swiper/shared/effect-init.js +1 -1
- package/cjs/node_modules/swiper/shared/effect-init.js.map +1 -1
- package/cjs/node_modules/swiper/shared/effect-target.js +1 -1
- package/cjs/node_modules/swiper/shared/effect-target.js.map +1 -1
- package/cjs/node_modules/swiper/shared/effect-virtual-transition-end.js +1 -1
- package/cjs/node_modules/swiper/shared/effect-virtual-transition-end.js.map +1 -1
- package/cjs/node_modules/swiper/shared/swiper-core.js +1 -1
- package/cjs/node_modules/swiper/shared/swiper-core.js.map +1 -1
- package/cjs/node_modules/swiper/shared/update-on-virtual-data.js +1 -1
- package/cjs/node_modules/swiper/shared/update-on-virtual-data.js.map +1 -1
- package/cjs/node_modules/swiper/shared/update-swiper.js +1 -1
- package/cjs/node_modules/swiper/shared/update-swiper.js.map +1 -1
- package/cjs/node_modules/swiper/shared/utils.js +1 -1
- package/cjs/node_modules/swiper/shared/utils.js.map +1 -1
- package/cjs/node_modules/swiper/swiper-react.js +1 -1
- package/cjs/node_modules/swiper/swiper-react.js.map +1 -1
- package/cjs/package.json +1 -0
- package/components/carousel/Autoplay.js.map +1 -1
- package/components/carousel/Carousel.js +1 -1
- package/components/carousel/Carousel.js.map +1 -1
- package/components/carousel/Navigation.js +1 -1
- package/components/carousel/Navigation.js.map +1 -1
- package/components/carousel/Pagination.js +1 -1
- package/components/carousel/Pagination.js.map +1 -1
- package/components/header/Header.js +1 -1
- package/components/header/Header.js.map +1 -1
- package/components/header/HeaderNavigationHero.js +1 -1
- package/components/header/HeaderNavigationHero.js.map +1 -1
- package/components/header/HeaderNavigationMenu.js +1 -1
- package/components/header/HeaderNavigationMenu.js.map +1 -1
- package/components/hotspotCard/HotspotCard.js +1 -1
- package/components/hotspotCard/HotspotCard.js.map +1 -1
- package/components/icon/stroke/EmissionLabelIcon.js.map +1 -1
- package/components/image/Image.d.ts +38 -14
- package/components/image/Image.js +1 -1
- package/components/image/Image.js.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/label/Label.js.map +1 -1
- package/components/overlay/Overlay.js +1 -1
- package/components/overlay/Overlay.js.map +1 -1
- package/components/video/Video.d.ts +9 -8
- package/components/video/Video.js +1 -1
- package/components/video/Video.js.map +1 -1
- package/components/video/index.d.ts +5 -1
- package/components/video/useVideoFullscreen.d.ts +13 -0
- package/components/video/useVideoFullscreen.js +2 -0
- package/components/video/useVideoFullscreen.js.map +1 -0
- package/components/video/useVideoPlayPause.d.ts +13 -0
- package/components/video/useVideoPlayPause.js +2 -0
- package/components/video/useVideoPlayPause.js.map +1 -0
- package/components/video/useVideoReady.d.ts +6 -0
- package/components/video/useVideoReady.js +2 -0
- package/components/video/useVideoReady.js.map +1 -0
- package/components/video/useVideoSoundControls.d.ts +17 -0
- package/components/video/useVideoSoundControls.js +2 -0
- package/components/video/useVideoSoundControls.js.map +1 -0
- package/components/video/useVideoTime.d.ts +22 -0
- package/components/video/useVideoTime.js +2 -0
- package/components/video/useVideoTime.js.map +1 -0
- package/components/videoPlayer/VideoPlayer.d.ts +125 -0
- package/components/videoPlayer/VideoPlayer.js +2 -0
- package/components/videoPlayer/VideoPlayer.js.map +1 -0
- package/components/videoPlayer/VideoPlayerFullscreenButton.d.ts +31 -0
- package/components/videoPlayer/VideoPlayerFullscreenButton.js +2 -0
- package/components/videoPlayer/VideoPlayerFullscreenButton.js.map +1 -0
- package/components/videoPlayer/VideoPlayerIconButton.d.ts +16 -0
- package/components/videoPlayer/VideoPlayerIconButton.js +2 -0
- package/components/videoPlayer/VideoPlayerIconButton.js.map +1 -0
- package/components/videoPlayer/VideoPlayerPlayPauseButton.d.ts +31 -0
- package/components/videoPlayer/VideoPlayerPlayPauseButton.js +2 -0
- package/components/videoPlayer/VideoPlayerPlayPauseButton.js.map +1 -0
- package/components/videoPlayer/VideoPlayerSkipButton.d.ts +23 -0
- package/components/videoPlayer/VideoPlayerSkipButton.js +2 -0
- package/components/videoPlayer/VideoPlayerSkipButton.js.map +1 -0
- package/components/videoPlayer/VideoPlayerSlider.d.ts +12 -0
- package/components/videoPlayer/VideoPlayerSlider.js +2 -0
- package/components/videoPlayer/VideoPlayerSlider.js.map +1 -0
- package/components/videoPlayer/VideoPlayerSoundButton.d.ts +31 -0
- package/components/videoPlayer/VideoPlayerSoundButton.js +2 -0
- package/components/videoPlayer/VideoPlayerSoundButton.js.map +1 -0
- package/components/videoPlayer/VideoPlayerTime.d.ts +17 -0
- package/components/videoPlayer/VideoPlayerTime.js +2 -0
- package/components/videoPlayer/VideoPlayerTime.js.map +1 -0
- package/components/videoPlayer/formatVideoTime.d.ts +5 -0
- package/components/videoPlayer/formatVideoTime.js +2 -0
- package/components/videoPlayer/formatVideoTime.js.map +1 -0
- package/components/videoPlayer/index.d.ts +10 -0
- package/components/videoPlayer/useVideoPlayerVisibility.d.ts +24 -0
- package/components/videoPlayer/useVideoPlayerVisibility.js +2 -0
- package/components/videoPlayer/useVideoPlayerVisibility.js.map +1 -0
- package/index.js +1 -1
- package/materialui/accordion/AccordionSummaryExpandWrapper.d.ts +5 -1
- package/materialui/accordion/AccordionSummaryExpandWrapper.js +1 -1
- package/materialui/accordion/AccordionSummaryExpandWrapper.js.map +1 -1
- package/materialui/alert/alertTitle.theme.js.map +1 -1
- package/materialui/card/Card.js.map +1 -1
- package/materialui/card/card.theme.js +1 -1
- package/materialui/card/card.theme.js.map +1 -1
- package/materialui/divider/divider.theme.js +1 -1
- package/materialui/divider/divider.theme.js.map +1 -1
- package/materialui/skeleton/skeleton.theme.js +1 -1
- package/materialui/skeleton/skeleton.theme.js.map +1 -1
- package/materialui/slider/slider.theme.js +1 -1
- package/materialui/slider/slider.theme.js.map +1 -1
- package/materialui/table/tablePagination.theme.js.map +1 -1
- package/materialui/tabs/Tab.d.ts +1 -0
- package/materialui/tabs/Tab.js +1 -1
- package/materialui/tabs/Tab.js.map +1 -1
- package/materialui/tabs/TabsScrollButton.d.ts +3 -1
- package/materialui/tabs/TabsScrollButton.js +1 -1
- package/materialui/tabs/TabsScrollButton.js.map +1 -1
- package/materialui/textfield/FormControl.js +1 -1
- package/materialui/textfield/FormControl.js.map +1 -1
- package/materialui/textfield/FormHelperText.js +1 -1
- package/materialui/textfield/FormHelperText.js.map +1 -1
- package/materialui/theme/sxConfig.js.map +1 -1
- package/materialui/theme/theme.extensions.d.ts +29 -0
- package/package.json +1 -1
- package/cjs/components/video/hooks.d.ts +0 -43
- package/cjs/components/video/hooks.js +0 -2
- package/cjs/components/video/hooks.js.map +0 -1
- package/cjs/node_modules/swiper/shared/ssr-window.esm.js +0 -2
- package/cjs/node_modules/swiper/shared/ssr-window.esm.js.map +0 -1
- package/components/video/hooks.d.ts +0 -43
- package/components/video/hooks.js +0 -2
- package/components/video/hooks.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swiper-core.js","sources":["../../../../../node_modules/swiper/shared/swiper-core.mjs"],"sourcesContent":["import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { d as elementParents, q as elementStyle, e as elementChildren, b as setCSSProperty, i as elementOuterSize, r as elementNextAll, t as elementPrevAll, l as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, h as now, x as extend, j as elementIndex, y 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({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad)(?!\\1).*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 (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize({\n swiper,\n on,\n emit\n}) {\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(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n 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({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\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(...args) {\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 if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n 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 const swiperSize = swiper.size - offsetBefore - offsetAfter;\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 - offsetBefore - offsetAfter;\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\n // set cssMode offsets\n if (params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-slides-offset-before', `${offsetBefore}px`);\n setCSSProperty(wrapperEl, '--swiper-slides-offset-after', `${offsetAfter}px`);\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides[i];\n if (slide) {\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n }\n\n if (isVirtual && params.slidesPerView === 'auto') {\n if (params.virtual.slidesPerViewAutoSlideSize) {\n slideSize = params.virtual.slidesPerViewAutoSlideSize;\n }\n if (slideSize && slide) {\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n } else if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slide.style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slide) {\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slide) {\n slide.swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n // Check if snapToSlideEdge should be applied\n const isFractionalSlidesPerView = params.slidesPerView !== 'auto' && params.slidesPerView % 1 !== 0;\n const shouldSnapToSlideEdge = params.snapToSlideEdge && !params.loop && (params.slidesPerView === 'auto' || isFractionalSlidesPerView);\n\n // Calculate the last allowed snap index when snapToSlideEdge is enabled\n // This ensures minimum slides are visible at the end\n let lastAllowedSnapIndex = snapGrid.length;\n if (shouldSnapToSlideEdge) {\n let minVisibleSlides;\n if (params.slidesPerView === 'auto') {\n // For 'auto' mode, calculate how many slides fit based on actual sizes\n minVisibleSlides = 1;\n let accumulatedSize = 0;\n for (let i = slidesSizesGrid.length - 1; i >= 0; i -= 1) {\n accumulatedSize += slidesSizesGrid[i] + (i < slidesSizesGrid.length - 1 ? spaceBetween : 0);\n if (accumulatedSize <= swiperSize) {\n minVisibleSlides = slidesSizesGrid.length - i;\n } else {\n break;\n }\n }\n } else {\n minVisibleSlides = Math.floor(params.slidesPerView);\n }\n lastAllowedSnapIndex = Math.max(slidesLength - minVisibleSlides, 0);\n }\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 (shouldSnapToSlideEdge) {\n // When snapToSlideEdge is enabled, only keep snaps up to lastAllowedSnapIndex\n if (i <= lastAllowedSnapIndex) {\n newSlidesGrid.push(slidesGridItem);\n }\n } else if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n // When snapToSlideEdge is disabled, keep snaps that fit within scrollable area\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n // Only add edge-aligned snap if snapToSlideEdge is not enabled\n if (!shouldSnapToSlideEdge) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n 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 swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.find(slideEl => slideEl.column === activeIndex);\n nextSlide = slides.find(slideEl => slideEl.column === activeIndex + 1);\n prevSlide = slides.find(slideEl => slideEl.column === activeIndex - 1);\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n });\n }\n }\n // Skip removal if managed by React/Vue component\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled) {\n if (params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else {\n realIndex = activeIndex;\n }\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.find(slideEl => slideEl.column === activeIndex);\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\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 = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\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 && dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n } else if (runCallbacks && activeIndex !== previousIndex) {\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 = true, direction) {\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 = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index = 0, speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // initial virtual\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n const browser = getBrowser();\n const isSafari = browser.isSafari;\n if (isVirtual && !initial && isSafari && swiper.isElement) {\n swiper.virtual.update(false, false, slideIndex);\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 = 0, speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter\n } = swiper.params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (bothDirections) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = bothDirections ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n const isFreeMode = params.freeMode && params.freeMode.enabled;\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\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 = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks = true, internal) {\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.getSlideIndexWhenGrid(swiper.clickedIndex);\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\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 swiper.slideToLoop(realIndex);\n } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : 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, initial) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const clearBlankSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n slides.forEach(el => {\n el.remove();\n });\n if (slides.length > 0) {\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n clearBlankSlides();\n }\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n const bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n swiper.loopFix({\n slideRealIndex,\n direction: bothDirections ? undefined : 'next',\n initial\n });\n}\n\nfunction loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n initial,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter,\n initialSlide\n } = params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!bothDirections && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (bothDirections && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = bothDirections ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !bothDirections;\n let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass)));\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (bothDirections && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n if (isInitialOverflow) {\n slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n }\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n if (appendSlidesIndexes.includes(activeSlideIndex)) {\n appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n if (prependSlidesIndexes.includes(activeSlideIndex)) {\n prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || !slidesEl || 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 = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n if (swiper.destroyed) return;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n if (swiper.destroyed) return;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {\n return;\n } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {\n return;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n document.activeElement.blur();\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n if (swiper.destroyed) return;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n const slides = isVirtual ? swiper.virtual.slides : swiper.slides;\n swiper.slideTo(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.destroyed) return;\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 if (swiper.destroyed) return;\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 if (swiper.destroyed) return;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.destroyed) return;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n const document = getDocument();\n\n // Get breakpoint for window/container width and update parameters\n const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';\n const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);\n const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n snapToSlideEdge: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\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 params.modules.forEach(mod => {\n if (typeof mod === 'function' && swiper.modules.indexOf(mod) < 0) {\n swiper.modules.push(mod);\n }\n });\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index));\n }\n getSlideIndexWhenGrid(index) {\n if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n if (this.params.grid.fill === 'column') {\n index = Math.floor(index / this.params.grid.rows);\n } else if (this.params.grid.fill === 'row') {\n index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n }\n }\n return index;\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 = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate(undefined, true);\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 = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n"],"names":["support","deviceCached","browser","getSupport","window","getWindow","document","getDocument","smoothScroll","documentElement","style","touch","DocumentTouch","calcSupport","getDevice","overrides","userAgent","platform","navigator","ua","device","ios","android","screenWidth","screen","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","indexOf","os","calcDevice","getBrowser","needPerspectiveFix","isSafari","toLowerCase","String","includes","major","minor","split","map","num","Number","isWebView","test","isSafariBrowser","need3dFix","calcBrowser","eventsEmitter","on","events","handler","priority","self","this","eventsListeners","destroyed","method","forEach","event","once","onceHandler","args","off","__emitterProxy","apply","onAny","eventsAnyListeners","offAny","index","splice","eventHandler","emit","data","context","Array","isArray","slice","length","unshift","toggleSlideClasses$1","slideEl","condition","className","classList","contains","add","remove","toggleSlideClasses","processLazyPreloader","swiper","imageEl","params","closest","isElement","slideClass","lazyEl","querySelector","lazyPreloaderClass","shadowRoot","requestAnimationFrame","lazyPreloaderManaged","unlazy","slides","removeAttribute","preload","amount","lazyPreloadPrevNext","len","Math","min","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","push","from","_","i","column","slideIndexLastInView","rewind","loop","realIndex","max","update","updateSize","el","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","elementStyle","isNaN","Object","assign","size","updateSlides","getDirectionPropertyValue","node","label","parseFloat","getPropertyValue","getDirectionLabel","wrapperEl","slidesEl","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","elementChildren","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","call","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","swiperSize","spaceBetween","slidePosition","prevSlideSize","replace","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","setCSSProperty","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","breakpoints","keys","filter","key","slide","updateSlide","slidesPerViewAutoSlideSize","roundLengths","floor","slideStyles","getComputedStyle","currentTransform","transform","currentWebKitTransform","webkitTransform","elementOuterSize","paddingLeft","paddingRight","boxSizing","offsetWidth","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","isFractionalSlidesPerView","shouldSnapToSlideEdge","snapToSlideEdge","lastAllowedSnapIndex","minVisibleSlides","accumulatedSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","speed","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","offsetHeight","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","translate","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","slideVisibleClass","slideFullyVisibleClass","progress","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","selector","activeSlide","prevSlide","nextSlide","find","elementNextAll","elementPrevAll","slideActiveClass","slideNextClass","slidePrevClass","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","firstSlideInColumn","activeSlideIndex","getAttribute","initialized","runCallbacksOnInit","updateClickedSlide","path","pathEl","matches","slideFound","clickedSlide","undefined","clickedIndex","slideToClickedSlide","getTranslate","axis","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","animateCSSModeScroll","targetPosition","side","scrollTo","behavior","onTranslateToWrapperTransitionEnd","e","target","removeEventListener","addEventListener","transitionEmit","direction","step","dir","slideTo","initial","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","transitionEnd","t","scrollSnapType","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","targetSlideIndex","cols","bothDirections","needLoopFix","loopFix","slideRealIndex","slideNext","perGroup","slidesPerGroupAuto","increment","loopPreventsSliding","_clientLeft","clientLeft","slidePrev","normalize","val","normalizedSnapGrid","isFreeMode","freeMode","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","getSlideIndexWhenGrid","slideSelector","isGrid","getSlideIndex","nextTick","loopCreate","setAttribute","loopAddBlankSlides","slideBlankClass","recalcSlides","clearBlankSlides","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","createElement","append","showWarning","byMousewheel","loopedSlides","loopAdditionalSlides","fill","prependSlidesIndexes","appendSlidesIndexes","isInitialOverflow","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","prepend","currentSlideTranslate","diff","touchEventsData","startTranslate","shift","controller","control","loopParams","c","constructor","loopDestroy","newSlidesOrder","swiperSlideIndex","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","innerWidth","preventDefault","onTouchStart","originalEvent","type","pointerId","targetTouches","touchId","identifier","pageX","touches","simulateTouch","pointerType","targetEl","touchEventsTarget","elementIsChildOf","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","host","closestElement","allowClick","swipeHandler","currentX","currentY","pageY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","now","swipeDirection","allowThresholdMove","focusableElements","nodeName","activeElement","blur","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","previousX","previousY","diffX","diffY","sqrt","touchAngle","atan2","PI","preventTouchMoveFromPointerMove","cancelable","touchMoveStopPropagation","nested","stopPropagation","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","evt","CustomEvent","bubbles","detail","bySwiperTouchMove","dispatchEvent","allowMomentumBounce","grabCursor","setGrabCursor","Date","getTime","_loopSwapReset","loopSwapReset","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","clearTimeout","resizeTimeout","setTimeout","resume","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","scrollLeft","scrollTop","onLoad","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","capture","domMethod","swiperMethod","passive","updateOnWindowResize","isGridEnabled","defaults","init","swiperElementNodeName","resizeObserver","createElements","eventsPrefix","url","breakpointsBase","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","obj","moduleParamName","moduleParams","auto","extend","prototypes","transition","duration","transitionDuration","transitionDelay","moving","isLocked","cursor","unsetGrabCursor","attachEvents","bind","detachEvents","breakpointContainer","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","emitContainerClasses","prop","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","value","sort","a","b","matchMedia","wasLocked","lastSlideRightEdge","classes","addClasses","classNames","suffixes","entries","prefix","resultClasses","item","prepareClasses","autoheight","centered","removeClasses","extendedDefaults","Swiper","prototype","toString","querySelectorAll","swipers","newParams","__swiper__","modules","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","property","elementIndex","setProgress","current","cls","join","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","element","mounted","parentNode","toUpperCase","getWrapperSelector","trim","getWrapper","slideSlots","hostEl","lazyElements","destroy","deleteInstance","cleanStyles","deleteProps","extendDefaults","newDefaults","installModule","use","module","m","prototypeGroup","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","cancelAnimationFrame","unobserve","observers","attach","options","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","elementParents","disconnect"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"swiper-core.js","sources":["../../../../../node_modules/swiper/shared/swiper-core.mjs"],"sourcesContent":["import { n as extend, l as elementStyle, v as now, u as nextTick, f as elementIsChildOf, y as showWarning, e as elementChildren, a as createElement, j as elementParents, q as getTranslate, w as setCSSProperty, i as elementOuterSize, g as elementNextAll, k as elementPrevAll, b as elementIndex, r as isHTMLElement, d as deleteProps } from './utils.mjs';\n\nlet supportCached;\nfunction calcSupport() {\n if (typeof window === 'undefined')\n return { touch: false };\n return {\n touch: 'ontouchstart' in window || navigator.maxTouchPoints > 0,\n };\n}\nfunction getSupport() {\n if (!supportCached)\n supportCached = calcSupport();\n return supportCached;\n}\n\nlet deviceCached;\nfunction calcDevice({ userAgent } = {}) {\n if (typeof window === 'undefined')\n return { ios: false, android: false };\n const support = getSupport();\n const platform = navigator.platform;\n const ua = userAgent || navigator.userAgent;\n const device = { ios: false, android: false };\n const isAndroid = /(Android);?[\\s/]+([\\d.]+)?/.test(ua);\n const isIPhoneOrIPod = /(iPhone\\sOS|iOS|iPod)/.test(ua);\n const isIPadDirect = /iPad/.test(ua);\n // iPad on iPadOS 13+ reports as MacIntel; distinguish from a real Mac by touch capability.\n const isIPadMasquerade = platform === 'MacIntel' && support.touch && navigator.maxTouchPoints > 1;\n const isIPad = isIPadDirect || isIPadMasquerade;\n const isWindows = platform === 'Win32';\n if (isAndroid && !isWindows) {\n device.os = 'android';\n device.android = true;\n }\n if (isIPad || isIPhoneOrIPod) {\n device.os = 'ios';\n device.ios = true;\n }\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached)\n deviceCached = calcDevice(overrides);\n return deviceCached;\n}\n\nlet browserCached;\nfunction calcBrowser() {\n if (typeof window === 'undefined') {\n return { isSafari: false, isWebView: false, need3dFix: false };\n }\n const device = getDevice();\n const ua = navigator.userAgent;\n const uaLower = ua.toLowerCase();\n const isSafari = uaLower.includes('safari') && !uaLower.includes('chrome') && !uaLower.includes('android');\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ua);\n // 3D transform glitches still affect iOS WebView and Safari at the baseline (16.4+).\n const need3dFix = isSafari || (isWebView && device.ios);\n return { isSafari, isWebView, need3dFix };\n}\nfunction getBrowser() {\n if (!browserCached)\n browserCached = calcBrowser();\n return browserCached;\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params || !swiper.params.lazyPreload)\n return;\n const slideSelector = () => (swiper.isElement ? 'swiper-slide' : `.${swiper.params.slideClass}`);\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n }\n else {\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n const innerLazy = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (innerLazy && !innerLazy.lazyPreloaderManaged)\n innerLazy.remove();\n }\n });\n }\n }\n if (lazyEl && !lazyEl.lazyPreloaderManaged)\n lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index])\n return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl)\n imageEl.removeAttribute('loading');\n};\nconst preload = (swiper) => {\n if (!swiper || swiper.destroyed || !swiper.params || !swiper.params.lazyPreload)\n return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0)\n return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto'\n ? swiper.slidesPerViewDynamic()\n : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && (swiper.params.grid.rows ?? 1) > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({ length: amount }).map((_, i) => activeColumn + slidesPerView + i));\n swiper.slides.forEach((slideEl, i) => {\n if (slideEl.column !== undefined && preloadColumns.includes(slideEl.column))\n 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)\n unlazy(swiper, realIndex);\n }\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 getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || (base === 'container' && !containerEl))\n return undefined;\n let breakpoint = false;\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 { value, point };\n }\n return { value: point, point };\n });\n points.sort((a, b) => parseInt(String(a.value), 10) - parseInt(String(b.value), 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n }\n else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\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 { realIndex, initialized, params, el } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0))\n return;\n // Get breakpoint for window/container width and update parameters\n const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase\n ? params.breakpointsBase\n : 'container';\n const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase\n ? swiper.el\n : document.querySelector(params.breakpointsBase);\n const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint)\n return;\n const breakpointsRecord = breakpoints;\n const breakpointOnlyParams = breakpoint in breakpointsRecord ? breakpointsRecord[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n }\n else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if ((breakpointParams.grid.fill && breakpointParams.grid.fill === 'column') ||\n (!breakpointParams.grid.fill && params.grid.fill === 'column')) {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n }\n else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n const moduleOpt = (opts, prop) => opts[prop];\n ['navigation', 'pagination', 'scrollbar'].forEach((prop) => {\n const bpOpts = moduleOpt(breakpointParams, prop);\n if (typeof bpOpts === 'undefined')\n return;\n const paramsOpts = moduleOpt(params, prop);\n const wasModuleEnabled = typeof paramsOpts === 'object' && paramsOpts !== null && paramsOpts.enabled;\n const isModuleEnabled = typeof bpOpts === 'object' && bpOpts !== null && bpOpts.enabled;\n const moduleApi = swiper[prop];\n if (wasModuleEnabled && !isModuleEnabled)\n moduleApi?.disable?.();\n if (!wasModuleEnabled && isModuleEnabled)\n moduleApi?.enable?.();\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n }\n else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n // Lay out with the new params before loopCreate(), so loopFix() sees current sizes and\n // isLocked state (a slider locked by watchOverflow skips loop entirely, #8228)\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.updateSlides();\n swiper.loopCreate(realIndex);\n }\n else if (!wasLoop && hasLoop) {\n swiper.updateSlides();\n swiper.loopCreate(realIndex);\n }\n else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nvar breakpoints = { setBreakpoint, getBreakpoint };\n\nfunction checkOverflow() {\n const swiper = this;\n const { isLocked: wasLocked, params } = swiper;\n const { slidesOffsetBefore } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] +\n swiper.slidesSizesGrid[lastSlideIndex] +\n slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n }\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 = { checkOverflow };\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 }\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 { classNames, params, rtl, el, device } = swiper;\n // oxfmt-ignore\n const suffixes = prepareClasses([\n 'initialized',\n params.direction,\n { 'free-mode': swiper.params.freeMode && params.freeMode.enabled },\n { 'autoheight': params.autoHeight },\n { 'rtl': rtl },\n { 'grid': params.grid && params.grid.rows > 1 },\n { 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' },\n { 'android': device.android },\n { 'ios': device.ios },\n { 'css-mode': params.cssMode },\n { 'centered': params.cssMode && params.centeredSlides },\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 { el, classNames } = swiper;\n if (!el || typeof el === 'string')\n return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = { addClasses, removeClasses };\n\nconst defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 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 slidesOffsetAfter: 0,\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n snapToSlideEdge: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n 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 slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreload: true,\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false,\n};\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed)\n return self;\n if (typeof handler !== 'function')\n return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event])\n 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)\n return self;\n if (typeof handler !== 'function')\n return self;\n const onceHandler = function onceHandlerFn(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\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)\n return self;\n if (typeof handler !== 'function')\n 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)\n return self;\n if (!self.eventsAnyListeners)\n 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)\n return self;\n if (!self.eventsListeners)\n return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n }\n else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler ||\n (eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler)) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed)\n return self;\n if (!self.eventsListeners)\n return self;\n let events;\n let data;\n let context;\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 }\n else {\n const opts = args[0];\n events = opts.events;\n data = opts.data ?? [];\n context = opts.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 onClick(e) {\n const swiper = this;\n if (swiper.destroyed)\n return;\n if (!swiper.enabled)\n return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks)\n e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.destroyed)\n return;\n if (swiper.documentTouchHandlerProceeded)\n return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nfunction onLoad(e) {\n const swiper = this;\n if (swiper.destroyed)\n return;\n processLazyPreloader(swiper, e.target);\n if (e.type === 'error' ||\n swiper.params.cssMode ||\n (swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight)) {\n return;\n }\n swiper.update();\n}\n\nfunction onResize() {\n const swiper = this;\n const { params, el } = swiper;\n if (el && el.offsetWidth === 0)\n return;\n // updateSlides() measures slides with their margins reset, and WebKit re-snaps the wrapper after\n // that layout - applying it after the re-seat below, short of the slide by the margins before it.\n // Keep snapping off until the next frame, as slideTo() does for virtual slides.\n const { wrapperEl } = swiper;\n const snapType = params.cssMode && wrapperEl ? wrapperEl.style.scrollSnapType : 'none';\n if (snapType !== 'none') {\n wrapperEl.style.scrollSnapType = 'none';\n requestAnimationFrame(() => {\n if (!swiper.destroyed)\n wrapperEl.style.scrollSnapType = snapType;\n });\n }\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n // Save locks\n const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual?.enabled;\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) &&\n swiper.isEnd &&\n !swiper.isBeginning &&\n !swiper.params.centeredSlides &&\n !isVirtualLoop) {\n const slidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n swiper.slideTo(slidesLength - 1, 0, false, true);\n }\n else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n }\n else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n // In cssMode the re-seat only writes the scroll position, and where the browser had already put\n // the wrapper there no scroll event follows to bring translate and progress up to date.\n if (params.cssMode && swiper.onScroll)\n swiper.onScroll();\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n const autoplay = swiper.autoplay;\n clearTimeout(autoplay.resizeTimeout);\n 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 measureSize(swiper) {\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 }\n else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n }\n else {\n height = el.clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return null;\n }\n // Subtract paddings\n width =\n width -\n parseInt(elementStyle(el, 'padding-left') || '0', 10) -\n parseInt(elementStyle(el, 'padding-right') || '0', 10);\n height =\n height -\n parseInt(elementStyle(el, 'padding-top') || '0', 10) -\n parseInt(elementStyle(el, 'padding-bottom') || '0', 10);\n if (Number.isNaN(width))\n width = 0;\n if (Number.isNaN(height))\n height = 0;\n return { width, height };\n}\n// Whether the container changed size along the slider since updateSize(), with the ResizeObserver\n// still to hand the change to onResize() on the next animation frame.\nfunction isResizePending(swiper) {\n const { params, el } = swiper;\n if (!params.updateOnWindowResize ||\n !params.resizeObserver ||\n typeof window.ResizeObserver === 'undefined') {\n return false;\n }\n const isH = swiper.isHorizontal();\n const clientSize = isH ? el.clientWidth : el.clientHeight;\n if (clientSize === swiper._clientSize)\n return false;\n // clientWidth includes the padding, the ResizeObserver only sees the content box: a padding\n // change alone leaves the slide grid as it was, and no onResize() follows to measure it.\n const measured = measureSize(swiper);\n if (!measured || (isH ? measured.width : measured.height) !== swiper.size)\n return true;\n swiper._clientSize = clientSize;\n return false;\n}\nfunction updateSize() {\n const swiper = this;\n const el = swiper.el;\n const measured = measureSize(swiper);\n if (!measured)\n return;\n const { width, height } = measured;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height,\n _clientSize: swiper.isHorizontal() ? el.clientWidth : el.clientHeight,\n });\n}\n\nfunction onScroll() {\n const swiper = this;\n if (swiper.destroyed)\n return;\n const { wrapperEl, rtlTranslate, enabled } = swiper;\n if (!enabled)\n return;\n // A resize moves the scroll position (re-snap, clamp) before onResize() measures the new layout;\n // read against the old slide grid it names another slide. Leave it to onResize(), which keeps\n // the slider on its slide. Browsers fire it before or after the ResizeObserver, so check the size.\n if (isResizePending(swiper))\n return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n }\n else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n if (swiper.translate === 0)\n 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 }\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 onTouchEnd(event) {\n const swiper = this;\n if (swiper.destroyed)\n return;\n const data = swiper.touchEventsData;\n let e = event.originalEvent ?? event;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null)\n return; // return from pointer if we use touch\n const pe = e;\n if (pe.pointerId !== data.pointerId)\n return;\n }\n else {\n const te = e;\n const found = [...te.changedTouches].find((t) => t.identifier === data.touchId);\n if (!found || found.identifier !== data.touchId)\n return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) &&\n (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n data.startEventPath = undefined;\n data.lastMoveEvent = undefined;\n const { params, touches, rtlTranslate: rtl, slidesGrid, enabled } = swiper;\n if (!enabled)\n return;\n if (!params.simulateTouch && e.pointerType === 'mouse')\n return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor &&\n data.isMoved &&\n data.isTouched &&\n (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n // Legacy `e.path` was a non-standard Chrome extension; `composedPath()` is the modern API.\n const pathTree = e.path ?? (e.composedPath && e.composedPath());\n swiper.updateClickedSlide((pathTree && pathTree[0]), pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed)\n swiper.allowClick = true;\n });\n if (!data.isTouched ||\n !data.isMoved ||\n !swiper.swipeDirection ||\n (touches.diff === 0 && !data.loopSwapReset) ||\n (data.currentTranslate === data.startTranslate && !data.loopSwapReset)) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n }\n else {\n currentPos = -(data.currentTranslate ?? 0);\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({ currentPos });\n return;\n }\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast ||\n (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment])) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n }\n else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex =\n params.virtual?.enabled && swiper.virtual\n ? swiper.virtual.slides.length - 1\n : swiper.slides.length - 1;\n }\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)\n swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);\n else\n swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n }\n else if (rewindLastIndex !== null &&\n ratio < 0 &&\n Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n }\n else {\n swiper.slideTo(stopIndex);\n }\n }\n }\n else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation &&\n (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 }\n else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n }\n else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onTouchMove(event) {\n const swiper = this;\n if (swiper.destroyed)\n return;\n const data = swiper.touchEventsData;\n const { params, touches, rtlTranslate: rtl, enabled } = swiper;\n if (!enabled)\n return;\n if (!params.simulateTouch && event.pointerType === 'mouse')\n return;\n // Legacy event wrappers nest the native event under .originalEvent.\n const wrapped = event;\n const e = wrapped.originalEvent ?? wrapped;\n if (e.type === 'pointermove') {\n if (data.touchId !== null)\n return; // return from pointer if we use touch\n const pe = e;\n if (pe.pointerId !== data.pointerId)\n return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n const te = e;\n const found = [...te.changedTouches].find((t) => t.identifier === data.touchId);\n if (!found || found.identifier !== data.touchId)\n return;\n targetTouch = found;\n }\n else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n // Nested swipers listen on document in capture phase, so they run in registration order and\n // an ancestor initialized first would move before its descendant can set\n // preventedByNestedSwiper. Run touched nested descendants first, innermost to outermost.\n if (data.lastMoveEvent === e)\n return;\n data.lastMoveEvent = e;\n for (const node of data.startEventPath ?? []) {\n if (node === swiper.el)\n break;\n const child = node.swiper;\n if (child &&\n child !== swiper &&\n !child.destroyed &&\n child.params.nested &&\n child.touchEventsData.isTouched) {\n child.onTouchMove(event);\n }\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if ((pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) ||\n (pageY > touches.startY && swiper.translate >= swiper.minTranslate())) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n }\n else if (rtl &&\n ((pageX > touches.startX && -swiper.translate <= swiper.maxTranslate()) ||\n (pageX < touches.startX && -swiper.translate >= swiper.minTranslate()))) {\n return;\n }\n else if (!rtl &&\n ((pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) ||\n (pageX > touches.startX && swiper.translate >= swiper.minTranslate()))) {\n return;\n }\n }\n if (document.activeElement &&\n document.activeElement.matches(data.focusableElements) &&\n document.activeElement !== e.target &&\n e.pointerType !== 'mouse') {\n document.activeElement.blur();\n }\n if (document.activeElement) {\n if (e.target === document.activeElement &&\n e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold)\n return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if ((swiper.isHorizontal() && touches.currentY === touches.startY) ||\n (swiper.isVertical() && touches.currentX === touches.startX)) {\n data.isScrolling = false;\n }\n else {\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()\n ? touchAngle > params.touchAngle\n : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || (e.type === 'touchmove' && data.preventTouchMoveFromPointerMove)) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal()\n ? touches.currentX - touches.previousX\n : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = (swiper.touchesDirection === 'next' && swiper.allowSlideNext) ||\n (swiper.touchesDirection === 'prev' && swiper.allowSlidePrev);\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({ direction: swiper.swipeDirection });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true,\n },\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n new Date().getTime();\n if (params._loopSwapReset !== false &&\n data.isMoved &&\n data.allowThresholdMove &&\n prevTouchesDirection !== swiper.touchesDirection &&\n isLoop &&\n allowLoopFix &&\n Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate,\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n // startTranslate is guaranteed to be set by this point (set in onTouchStart-side init).\n const startTranslate = data.startTranslate ?? 0;\n data.currentTranslate = diff + 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 &&\n allowLoopFix &&\n true &&\n data.allowThresholdMove &&\n data.currentTranslate >\n (params.centeredSlides\n ? swiper.minTranslate() -\n swiper.slidesSizesGrid[swiper.activeIndex + 1] -\n (params.slidesPerView !== 'auto' &&\n swiper.slides.length - params.slidesPerView >= 2\n ? swiper.slidesSizesGrid[swiper.activeIndex + 1] +\n swiper.params.spaceBetween\n : 0) -\n swiper.params.spaceBetween\n : swiper.minTranslate())) {\n swiper.loopFix({ direction: 'prev', setTranslate: true, activeSlideIndex: 0 });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate =\n swiper.minTranslate() -\n 1 +\n (-swiper.minTranslate() + startTranslate + diff) ** resistanceRatio;\n }\n }\n }\n else if (diff < 0) {\n if (isLoop &&\n allowLoopFix &&\n true &&\n data.allowThresholdMove &&\n data.currentTranslate <\n (params.centeredSlides\n ? swiper.maxTranslate() +\n swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] +\n swiper.params.spaceBetween +\n (params.slidesPerView !== 'auto' &&\n swiper.slides.length - params.slidesPerView >= 2\n ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] +\n swiper.params.spaceBetween\n : 0)\n : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length -\n (params.slidesPerView === 'auto'\n ? swiper.slidesPerViewDynamic()\n : Math.ceil(parseFloat(String(params.slidesPerView)))),\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate =\n swiper.maxTranslate() +\n 1 -\n (swiper.maxTranslate() - startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n // Directions locks\n if (!swiper.allowSlideNext &&\n swiper.swipeDirection === 'next' &&\n (data.currentTranslate ?? 0) < startTranslate) {\n data.currentTranslate = startTranslate;\n }\n if (!swiper.allowSlidePrev &&\n swiper.swipeDirection === 'prev' &&\n (data.currentTranslate ?? 0) > startTranslate) {\n data.currentTranslate = startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = startTranslate;\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()\n ? touches.currentX - touches.startX\n : touches.currentY - touches.startY;\n return;\n }\n }\n else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode)\n return;\n // Update active index in free mode\n if ((params.freeMode && params.freeMode.enabled && swiper.freeMode) ||\n 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 ?? 0);\n}\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n function __closestFrom(el) {\n if (!el || el === document || el === window)\n return null;\n let cur = el;\n if (cur.assignedSlot)\n cur = cur.assignedSlot;\n const found = cur.closest(selector);\n if (!found && !cur.getRootNode) {\n return null;\n }\n const root = cur.getRootNode();\n return found || __closestFrom(root.host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const { params } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection &&\n (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n if (swiper.destroyed)\n return;\n const e = event.originalEvent ?? event;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n const pe = e;\n if (data.pointerId !== null && data.pointerId !== pe.pointerId) {\n return;\n }\n data.pointerId = pe.pointerId;\n }\n else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const { params, touches, enabled } = swiper;\n if (!enabled)\n return;\n if (!params.simulateTouch && e.pointerType === 'mouse')\n return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!elementIsChildOf(targetEl, swiper.wrapperEl))\n return;\n }\n // Secondary mouse buttons (right-click / middle-click) shouldn't start a swipe.\n const mouseLike = e;\n if (typeof mouseLike.which === 'number' && mouseLike.which === 3)\n return;\n if (typeof mouseLike.button === 'number' && mouseLike.button > 0)\n return;\n if (data.isTouched && data.isMoved)\n return;\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // `path` is a non-standard Chrome extension; `composedPath()` is the modern API.\n const eventPath = e.composedPath\n ? e.composedPath()\n : e.path;\n if (swipingClassHasValue &&\n e.target &&\n e.target.shadowRoot &&\n eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector\n ? params.noSwipingSelector\n : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping &&\n (isTargetShadow\n ? closestElement(noSwipingSelector, targetEl)\n : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (typeof params.swipeHandler === 'string' && !targetEl.closest(params.swipeHandler))\n return;\n }\n // At this point `e` is a PointerEvent or MouseEvent (touchstart returned earlier).\n const pe = e;\n touches.currentX = pe.pageX;\n touches.currentY = pe.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n data.startEventPath = eventPath;\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0)\n 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 &&\n document.activeElement.matches(data.focusableElements) &&\n document.activeElement !== targetEl &&\n (pe.pointerType === 'mouse' ||\n (pe.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements)))) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) &&\n !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode &&\n params.freeMode.enabled &&\n swiper.freeMode &&\n swiper.animating &&\n !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nconst events = (swiper, method) => {\n const { params, el, wrapperEl, device } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string')\n return;\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture,\n });\n el[domMethod]('touchstart', swiper.onTouchStart, { passive: false });\n el[domMethod]('pointerdown', swiper.onTouchStart, { passive: false });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture,\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture,\n });\n document[domMethod]('touchend', swiper.onTouchEnd, { passive: true });\n document[domMethod]('pointerup', swiper.onTouchEnd, { passive: true });\n document[domMethod]('pointercancel', swiper.onTouchEnd, { passive: true });\n document[domMethod]('touchcancel', swiper.onTouchEnd, { passive: true });\n document[domMethod]('pointerout', swiper.onTouchEnd, { passive: true });\n document[domMethod]('pointerleave', swiper.onTouchEnd, { passive: true });\n document[domMethod]('contextmenu', swiper.onTouchEnd, { passive: true });\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 // Resize handler\n const subscribe = (events) => {\n swiper[swiperMethod](events, onResize, true);\n };\n if (params.updateOnWindowResize) {\n subscribe(device.ios || device.android\n ? 'resize orientationchange observerUpdate'\n : 'resize observerUpdate');\n }\n else {\n subscribe('observerUpdate');\n }\n // Images loader\n if (params.lazyPreload) {\n el[domMethod]('load', swiper.onLoad, { capture: true });\n el[domMethod]('error', swiper.onLoad, { capture: true });\n }\n};\nfunction attachEvents() {\n const swiper = this;\n const { params } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents,\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode)\n 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\nfunction loopCreate(slideRealIndex, initial) {\n const swiper = this;\n const { params, slidesEl } = swiper;\n if (!params.loop || (swiper.virtual && swiper.params.virtual?.enabled))\n return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', String(index));\n });\n };\n const clearBlankSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n slides.forEach((el) => {\n el.remove();\n });\n if (slides.length > 0) {\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n clearBlankSlides();\n }\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = (amountOfSlides) => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement\n ? createElement('swiper-slide', [params.slideBlankClass])\n : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - (swiper.slides.length % slidesPerGroup);\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n }\n else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - (swiper.slides.length % params.grid.rows);\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n }\n else {\n initSlides();\n }\n const bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n swiper.loopFix({\n slideRealIndex,\n direction: bothDirections ? undefined : 'next',\n initial,\n });\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const { params, slidesEl } = swiper;\n if (!params.loop || !slidesEl || (swiper.virtual && swiper.params.virtual?.enabled))\n return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach((slideEl) => {\n const loopSlideEl = slideEl;\n const index = typeof loopSlideEl.swiperSlideIndex === 'undefined'\n ? Number(slideEl.getAttribute('data-swiper-slide-index'))\n : loopSlideEl.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\nfunction loopFix(options = {}) {\n const { slideRealIndex, slideTo = true, direction, setTranslate, activeSlideIndex: activeSlideIndexParam, initial, byController, byMousewheel, } = options;\n let activeSlideIndex = activeSlideIndexParam;\n const swiper = this;\n if (!swiper.params.loop)\n return;\n // A locked slider (watchOverflow, all slides fit) can't move, so there is nothing to loop:\n // keep the original slide order and don't warn about too few slides (#8228)\n if (swiper.params.watchOverflow && swiper.isLocked)\n return;\n swiper.emit('beforeLoopFix');\n // The compensating slideTo() teleports below change indexes/translate without any\n // observable slide change, so updateActiveIndex() must not emit index-change events\n // while this flag is set (otherwise pagination flickers mid-drag, see #8015)\n swiper.__loopFixInProgress__ = true;\n const { slides, allowSlidePrev, allowSlideNext, slidesEl, params } = swiper;\n const { centeredSlides, slidesOffsetBefore, slidesOffsetAfter, initialSlide } = params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual?.enabled) {\n if (slideTo) {\n const virtualSlidesLength = swiper.virtual.slides.length;\n const virtualSlidesBefore = swiper.virtual.slidesBefore ?? 0;\n if (!bothDirections && swiper.snapIndex === 0) {\n swiper.slideTo(virtualSlidesLength, 0, false, true);\n }\n else if (bothDirections && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(virtualSlidesLength + swiper.snapIndex, 0, false, true);\n }\n else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(virtualSlidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.__loopFixInProgress__ = false;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n }\n else {\n slidesPerView = Math.ceil(parseFloat(String(params.slidesPerView)));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto\n ? slidesPerView\n : params.slidesPerGroup;\n // How many slides the before/after offsets are worth. Unlike centeredSlides\n // (which hides ~slidesPerView / 2 slides on each side), an offset hides only\n // offset / slideSize slides, so sizing the loop buffer from slidesPerView / 2\n // would teleport further than the snapGrid allows with few slides (#8203).\n // Offsets accept a legacy function form at runtime (see updateSlides), so\n // narrow before doing math on them.\n const resolveOffset = (value) => (typeof value === 'function' ? value.call(swiper) : value) || 0;\n const slidesGridStep = swiper.slidesGrid.length > 1\n ? (swiper.slidesGrid[swiper.slidesGrid.length - 1] - swiper.slidesGrid[0]) /\n (swiper.slidesGrid.length - 1)\n : swiper.size;\n const offsetSlidesBefore = slidesGridStep > 0 ? resolveOffset(slidesOffsetBefore) / slidesGridStep : 0;\n const offsetSlidesAfter = slidesGridStep > 0 ? resolveOffset(slidesOffsetAfter) / slidesGridStep : 0;\n let loopedSlides = bothDirections\n ? Math.max(slidesPerGroup, (centeredSlides ? Math.ceil(slidesPerView / 2) : 0) +\n Math.ceil(Math.max(offsetSlidesBefore, offsetSlidesAfter)))\n : slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - (loopedSlides % slidesPerGroup);\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides ||\n (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2)) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n }\n else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n // The active slide must be able to sit between loopedSlides on each side; when there are\n // too few slides for that (e.g. loopAdditionalSlides, which the cards effect sets to 2-3),\n // every index falls into the prepend branch and nothing is ever appended, so forward\n // navigation gets stuck (#8008). Shrink the buffer to what the slides can hold, keeping\n // it a whole number of groups and leaving one slide to spare: with none, the forward\n // loopFix in onTouchMove fires right at drag start and appends the active slide itself.\n if (loopedSlides > (cols - slidesPerView) / 2) {\n loopedSlides = Math.max(slidesPerGroup, Math.floor((cols - slidesPerView - 1) / 2 / slidesPerGroup) * slidesPerGroup);\n swiper.loopedSlides = loopedSlides;\n }\n const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !bothDirections;\n let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.find((el) => el.classList.contains(params.slideActiveClass)));\n }\n else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const activeColIndex = gridEnabled\n ? (slides[activeSlideIndex].column ?? 0)\n : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex +\n (bothDirections && typeof setTranslate === 'undefined'\n ? (centeredSlides ? -slidesPerView / 2 + 0.5 : 0) - offsetSlidesBefore\n : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n // prepend exactly what the compensating slideTo() below shifts by (like the append branch)\n for (let i = 0; i < slidesPrepended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let j = slides.length - 1; j >= 0; j -= 1) {\n if (slides[j].column === colIndexToPrepend)\n prependSlidesIndexes.push(j);\n }\n }\n else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n }\n else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n if (isInitialOverflow) {\n slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n }\n // The view must still fit inside the slides afterwards. With a forced activeSlideIndex far\n // to the right (slideToLoop) and a buffer shrunk by the cap above, the formula above can\n // come up short and leave the end of the view empty (#8253)\n slidesAppended = Math.max(slidesAppended, Math.ceil(activeColIndexWithShift + slidesPerView - cols));\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index)\n appendSlidesIndexes.push(slideIndex);\n });\n }\n else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n if (appendSlidesIndexes.includes(activeSlideIndex)) {\n appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n if (prependSlidesIndexes.includes(activeSlideIndex)) {\n prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach((index) => {\n const slideEl = slides[index];\n slideEl.swiperLoopMoveDOM = true;\n slidesEl.prepend(slideEl);\n slideEl.swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach((index) => {\n const slideEl = slides[index];\n slideEl.swiperLoopMoveDOM = true;\n slidesEl.append(slideEl);\n slideEl.swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n else if (gridEnabled &&\n ((prependSlidesIndexes.length > 0 && isPrev) || (appendSlidesIndexes.length > 0 && isNext))) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n }\n else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate =\n swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate =\n swiper.touchEventsData.currentTranslate - diff;\n }\n }\n }\n else {\n if (setTranslate) {\n const shift = gridEnabled\n ? prependSlidesIndexes.length / params.grid.rows\n : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\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 }\n else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate =\n swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate =\n swiper.touchEventsData.currentTranslate - diff;\n }\n }\n }\n else {\n const shift = gridEnabled\n ? appendSlidesIndexes.length / params.grid.rows\n : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n const controlled = swiper.controller?.control;\n if (controlled && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true,\n };\n if (Array.isArray(controlled)) {\n controlled.forEach((c) => {\n if (!c.destroyed && c.params.loop)\n c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false,\n });\n });\n }\n else if (controlled instanceof swiper.constructor &&\n controlled.params.loop) {\n controlled.loopFix({\n ...loopParams,\n slideTo: controlled.params.slidesPerView === params.slidesPerView ? slideTo : false,\n });\n }\n }\n swiper.__loopFixInProgress__ = false;\n swiper.emit('loopFix');\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy,\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (moduleParamName === 'navigation' &&\n params[moduleParamName] &&\n params[moduleParamName].enabled &&\n !params[moduleParamName].prevEl &&\n !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 &&\n params[moduleParamName] &&\n params[moduleParamName].enabled &&\n !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName])\n params[moduleParamName] = { enabled: false };\n extend(allModulesParams, obj);\n };\n}\n\nconst Observer = ({ swiper, extendParams, on }) => {\n const observers = [];\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver ||\n window\n .WebkitMutationObserver;\n if (!ObserverFunc)\n return;\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__)\n return;\n if (mutations.length === 1) {\n swiper.emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n swiper.emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n }\n else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options.childList),\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer)\n 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 // Observe wrapper\n attach(swiper.wrapperEl, { attributes: false });\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\nconst Resize = ({ swiper, on, emit }) => {\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized)\n return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized)\n return;\n // Entry sizes come from the layout before the rAF, while onResize() stores the live size in\n // swiper.width/height. Comparing entries against swiper.width therefore skipped every other\n // frame of a continuous resize, painting those frames with a stale translate (#8230), so\n // compare against the last handled entry size instead.\n let observedWidth = swiper.width;\n let observedHeight = swiper.height;\n observer = new ResizeObserver((entries) => {\n animationFrame = window.requestAnimationFrame(() => {\n let newWidth = observedWidth;\n let newHeight = observedHeight;\n entries.forEach(({ contentBoxSize, contentRect, target }) => {\n if (target && target !== swiper.el)\n return;\n // Older Safari (≤15) exposed `contentBoxSize` as a single object instead of an array.\n const box = Array.isArray(contentBoxSize)\n ? contentBoxSize[0]\n : contentBoxSize;\n newWidth = contentRect ? contentRect.width : box.inlineSize;\n newHeight = contentRect ? contentRect.height : box.blockSize;\n });\n if (newWidth !== observedWidth || newHeight !== observedHeight) {\n observedWidth = newWidth;\n observedHeight = newHeight;\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)\n 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 slideNext(speed, runCallbacks = true, internal) {\n const swiper = this;\n const { enabled, params, animating } = swiper;\n if (!enabled || swiper.destroyed)\n return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual?.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding)\n return false;\n swiper.loopFix({ direction: 'next' });\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\nfunction slidePrev(speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, snapGrid, slidesGrid, rtlTranslate, enabled, animating } = swiper;\n if (!enabled || swiper.destroyed)\n return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual?.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding)\n return false;\n swiper.loopFix({ direction: 'prev' });\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0)\n 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 const isFreeMode = params.freeMode && params.freeMode.enabled;\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = isFreeMode\n ? snapGrid[prevSnapIndex]\n : 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)\n prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' &&\n params.slidesPerGroup === 1 &&\n params.slidesPerGroupAuto) {\n // slidesPerViewDynamic('previous') counts from activeIndex, so step from there (stepping\n // from prevSnap's index overshoots by one); always move back at least one slide (#8235)\n const prevSlidesInView = swiper.slidesPerViewDynamic('previous', true) - 1;\n prevIndex = Math.max(swiper.activeIndex - Math.max(prevSlidesInView, 1), 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual?.enabled && swiper.virtual\n ? swiper.virtual.slides.length - 1\n : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\nfunction slideReset(speed, runCallbacks = true, internal) {\n const swiper = this;\n if (swiper.destroyed)\n return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\nfunction slideTo(index = 0, speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0)\n slideIndex = 0;\n const { params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl, enabled, } = swiper;\n if ((!enabled && !internal && !initial) ||\n swiper.destroyed ||\n (swiper.animating && params.preventInteractionOnTransition)) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length)\n 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 &&\n normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n }\n else if (normalizedTranslate >= normalizedGrid &&\n normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\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 &&\n (rtl\n ? translate > swiper.translate && translate > swiper.minTranslate()\n : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev &&\n translate > swiper.translate &&\n 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 // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex)\n direction = 'next';\n else if (slideIndex < activeIndex)\n direction = 'prev';\n else\n direction = 'reset';\n // initial virtual\n const isVirtual = swiper.virtual && swiper.params.virtual?.enabled;\n const isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual &&\n ((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 // onScroll() leaves the scroll this causes to onResize() while a resize is pending, and\n // onResize() re-seats the slider onto activeIndex - so it has to name this slide already.\n if (isResizePending(swiper))\n swiper.updateActiveIndex(slideIndex);\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && (swiper.params.initialSlide ?? 0) > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\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 }\n else {\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth',\n });\n }\n return true;\n }\n const browser = getBrowser();\n const isSafari = browser.isSafari;\n if (isVirtual && !initial && isSafari && swiper.isElement) {\n swiper.virtual.update(false, false, slideIndex);\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 }\n else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed)\n return;\n if (e.target !== this)\n 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 slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed)\n return;\n const { params, slidesEl, clickedSlide, clickedIndex } = swiper;\n if (clickedSlide === undefined || clickedIndex === undefined)\n return;\n const slidesPerView = params.slidesPerView === 'auto'\n ? swiper.slidesPerViewDynamic()\n : params.slidesPerView;\n let slideToIndex = swiper.getSlideIndexWhenGrid(clickedIndex);\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n if (params.loop) {\n if (swiper.animating)\n return;\n realIndex = parseInt(clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n swiper.slideToLoop(realIndex);\n }\n else if (slideToIndex >\n (isGrid\n ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1)\n : 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 }\n else {\n swiper.slideTo(slideToIndex);\n }\n }\n else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nfunction slideToClosest(speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n if (swiper.destroyed)\n return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n }\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 slideToLoop(index = 0, speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed)\n return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual?.enabled) {\n newIndex = newIndex + (swiper.virtual.slidesBefore ?? 0);\n }\n else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n const targetSlideEl = swiper.slides.find((slideEl) => Number(slideEl.getAttribute('data-swiper-slide-index')) === slideIndex);\n targetSlideIndex = targetSlideEl?.column ?? 0;\n }\n else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled\n ? Math.ceil(swiper.slides.length / swiper.params.grid.rows)\n : swiper.slides.length;\n const { centeredSlides, slidesOffsetBefore, slidesOffsetAfter } = swiper.params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n let slidesPerView;\n if (swiper.params.slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n }\n else {\n slidesPerView = Math.ceil(parseFloat(String(swiper.params.slidesPerView)));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n // A centered target only needs half a view of slides on each side. Asking for a whole\n // view after it makes loopFix rearrange slides that already fit, which with only one\n // slide to spare moves a slide away from the target's side and leaves a gap (#8253)\n const halfView = Math.floor(slidesPerView / 2);\n needLoopFix = targetSlideIndex < halfView || cols - 1 - targetSlideIndex < halfView;\n }\n else if (bothDirections) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = bothDirections\n ? targetSlideIndex < swiper.activeIndex\n ? 'prev'\n : 'next'\n : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView\n ? 'next'\n : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined,\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n const targetSlideEl = swiper.slides.find((slideEl) => Number(slideEl.getAttribute('data-swiper-slide-index')) === slideIndex);\n newIndex = targetSlideEl?.column ?? 0;\n }\n else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide,\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({ swiper, runCallbacks, direction, step, }) {\n const { activeIndex, previousIndex } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex)\n dir = 'next';\n else if (activeIndex < previousIndex)\n dir = 'prev';\n else\n dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n }\n else if (runCallbacks && activeIndex !== previousIndex) {\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n }\n else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n swiper.animating = false;\n if (params.cssMode)\n return;\n swiper.setTransition(0);\n transitionEmit({ swiper, runCallbacks, direction, step: 'End' });\n}\n\nfunction transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n if (params.cssMode)\n return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({ swiper, runCallbacks, direction, step: 'Start' });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd,\n};\n\nfunction getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const { params, rtlTranslate: rtl, translate, wrapperEl } = 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)\n currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const { rtlTranslate: rtl, params, wrapperEl, progress } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n }\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 }\n else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n }\n else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\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 }\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 translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const { params, wrapperEl } = 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)\n newTranslate = minTranslate;\n else if (translateBounds && translate < maxTranslate)\n newTranslate = maxTranslate;\n else\n newTranslate = translate;\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 }\n else {\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 }\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)\n return;\n if (e.target !== this)\n return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo,\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const { slidesGrid, params } = 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] &&\n translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n }\n else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\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')\n 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 { snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex, } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = (aIndex) => {\n const virtualSlides = swiper.virtual.slides;\n let realIndex = aIndex - (swiper.virtual.slidesBefore ?? 0);\n if (realIndex < 0) {\n realIndex = virtualSlides.length + realIndex;\n }\n if (realIndex >= virtualSlides.length) {\n realIndex -= virtualSlides.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 }\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)\n snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex &&\n swiper.params.loop &&\n swiper.virtual &&\n swiper.params.virtual?.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual?.enabled) {\n if (params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n }\n else {\n realIndex = activeIndex;\n }\n }\n else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.find((slideEl) => slideEl.column === activeIndex);\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n }\n else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n }\n else {\n realIndex = activeIndex;\n }\n }\n else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex,\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n // Loop-fix teleports change indexes without any observable slide change —\n // emitting here would make pagination and other listeners react to transient\n // wrong indexes (#8015). The enclosing slide action emits the final events.\n if (swiper.__loopFixInProgress__)\n return;\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n // Compare to the realIndex listeners last heard, not to the previous call's\n // value — a suppressed loop-fix call in between would otherwise advance the\n // baseline and swallow (or duplicate) a realIndexChange\n if ((swiper.__lastEmittedRealIndex__ ?? previousRealIndex) !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n swiper.__lastEmittedRealIndex__ = realIndex;\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 }\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 }\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)\n break;\n const slide = getSlideByIndex(index);\n if (slide)\n activeSlides.push(slide);\n }\n }\n }\n else {\n const slide = getSlideByIndex(swiper.activeIndex);\n if (slide)\n activeSlides.push(slide);\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 // Update Height\n if (newHeight || newHeight === 0)\n swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach((pathEl) => {\n if (!slide &&\n pathEl.matches &&\n pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual?.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n }\n else {\n swiper.clickedIndex = slideIndex;\n }\n }\n else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide &&\n swiper.clickedIndex !== undefined &&\n swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n translate = (swiper && swiper.translate && swiper.translate * multiplier) || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let { progress, isBeginning, isEnd } = swiper;\n let progressLoop = swiper.progressLoop;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n }\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)\n progress = 0;\n if (isEndRounded)\n 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 }\n else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1)\n progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd,\n });\n if (params.watchSlidesProgress || (params.centeredSlides && params.autoHeight))\n 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 updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || '0');\n }\n const params = swiper.params;\n const { wrapperEl, slidesEl, rtlTranslate: rtl, wrongRTL } = 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 const resolveOffset = (value) => typeof value === 'function' ? value.call(swiper) : value;\n const offsetBefore = resolveOffset(params.slidesOffsetBefore);\n const offsetAfter = resolveOffset(params.slidesOffsetAfter);\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n const swiperSize = swiper.size - offsetBefore - offsetAfter;\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 }\n else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize =\n -spaceBetween - offsetBefore - offsetAfter;\n // reset margins\n slides.forEach((slideEl) => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n }\n else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\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 // set cssMode offsets\n if (params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-slides-offset-before', `${offsetBefore}px`);\n setCSSProperty(wrapperEl, '--swiper-slides-offset-after', `${offsetAfter}px`);\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n }\n else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n // Calc slides\n let slideSize = 0;\n const shouldResetSlideSize = params.slidesPerView === 'auto' &&\n params.breakpoints &&\n Object.keys(params.breakpoints).filter((key) => {\n const bp = params.breakpoints[key];\n return typeof bp?.slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides[i];\n if (slide) {\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (elementStyle(slide, 'display') === 'none')\n continue;\n }\n if (isVirtual && params.slidesPerView === 'auto') {\n if (params.virtual?.slidesPerViewAutoSlideSize) {\n slideSize = params.virtual.slidesPerViewAutoSlideSize;\n }\n if (slideSize && slide) {\n if (params.roundLengths)\n slideSize = Math.floor(slideSize);\n slide.style[swiper.getDirectionLabel('width')] =\n `${slideSize}px`;\n }\n }\n else if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slide.style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform =\n 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal()\n ? elementOuterSize(slide, 'width')\n : elementOuterSize(slide, 'height');\n }\n else {\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 }\n else {\n const { clientWidth, offsetWidth } = slide;\n slideSize =\n width +\n paddingLeft +\n paddingRight +\n marginLeft +\n marginRight +\n (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform =\n currentWebKitTransform;\n }\n if (params.roundLengths)\n slideSize = Math.floor(slideSize);\n }\n else {\n slideSize =\n (swiperSize - (params.slidesPerView - 1) * spaceBetween) /\n params.slidesPerView;\n if (params.roundLengths)\n slideSize = Math.floor(slideSize);\n if (slide) {\n slide.style[swiper.getDirectionLabel('width')] =\n `${slideSize}px`;\n }\n }\n if (slide) {\n slide.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)\n slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0)\n slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000)\n slidePosition = 0;\n if (params.roundLengths)\n slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0)\n snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n }\n else {\n if (params.roundLengths)\n slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) %\n swiper.params.slidesPerGroup ===\n 0)\n snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n // Check if snapToSlideEdge should be applied\n const isFractionalSlidesPerView = params.slidesPerView !== 'auto' && params.slidesPerView % 1 !== 0;\n const shouldSnapToSlideEdge = params.snapToSlideEdge &&\n !params.loop &&\n (params.slidesPerView === 'auto' || isFractionalSlidesPerView);\n // Calculate the last allowed snap index when snapToSlideEdge is enabled\n // This ensures minimum slides are visible at the end\n let lastAllowedSnapIndex = snapGrid.length;\n if (shouldSnapToSlideEdge) {\n let minVisibleSlides;\n if (params.slidesPerView === 'auto') {\n // For 'auto' mode, calculate how many slides fit based on actual sizes\n minVisibleSlides = 1;\n let accumulatedSize = 0;\n for (let i = slidesSizesGrid.length - 1; i >= 0; i -= 1) {\n accumulatedSize +=\n slidesSizesGrid[i] + (i < slidesSizesGrid.length - 1 ? spaceBetween : 0);\n if (accumulatedSize <= swiperSize) {\n minVisibleSlides = slidesSizesGrid.length - i;\n }\n else {\n break;\n }\n }\n }\n else {\n minVisibleSlides = Math.floor(params.slidesPerView);\n }\n lastAllowedSnapIndex = Math.max(slidesLength - minVisibleSlides, 0);\n }\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths)\n slidesGridItem = Math.floor(slidesGridItem);\n if (shouldSnapToSlideEdge) {\n // When snapToSlideEdge is enabled, only keep snaps up to lastAllowedSnapIndex\n if (i <= lastAllowedSnapIndex) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n else if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n // When snapToSlideEdge is disabled, keep snaps that fit within scrollable area\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) >\n 1) {\n // Only add edge-aligned snap if snapToSlideEdge is not enabled\n if (!shouldSnapToSlideEdge) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n const slidesBefore = swiper.virtual.slidesBefore ?? 0;\n const slidesAfter = swiper.virtual.slidesAfter ?? 0;\n const virtualLoopCount = slidesBefore + slidesAfter;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil(virtualLoopCount / 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 < virtualLoopCount; 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)\n snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides\n .filter((_, slideIndex) => {\n if (!params.cssMode || params.loop)\n return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n })\n .forEach((slideEl) => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n snapGrid = snapGrid.map((snap) => {\n if (snap <= 0)\n return -offsetBefore;\n if (snap > maxSnap)\n 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)\n swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded)\n swiper.el.classList.add(backFaceHiddenClass);\n }\n else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n }\n else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const { slides, params, slidesEl, activeIndex } = swiper;\n const isVirtual = !!(swiper.virtual && params.virtual?.enabled);\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = (selector) => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n const virtualSlides = swiper.virtual.slides;\n let slideIndex = activeIndex - (swiper.virtual.slidesBefore ?? 0);\n if (slideIndex < 0)\n slideIndex = virtualSlides.length + slideIndex;\n if (slideIndex >= virtualSlides.length)\n slideIndex -= virtualSlides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n }\n else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n }\n else if (gridEnabled) {\n activeSlide = slides.find((slideEl) => slideEl.column === activeIndex);\n nextSlide = slides.find((slideEl) => slideEl.column === activeIndex + 1);\n prevSlide = slides.find((slideEl) => slideEl.column === activeIndex - 1);\n }\n else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n // NOTE: legacy guard from v9; `(!prevSlide) === 0` is always false, but we preserve\n // the original behaviour (no-op) to avoid runtime changes in v14. Audit candidate.\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach((slideEl) => {\n toggleSlideClasses$1(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses$1(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses$1(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n const minusOffset = swiper.isElement\n ? swiper.isHorizontal()\n ? swiper.wrapperEl.offsetLeft\n : swiper.wrapperEl.offsetTop\n : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset =\n (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) -\n minusOffset -\n swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n }\n else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate = (this && this.translate) || 0) {\n const swiper = this;\n const params = swiper.params;\n const { slides, rtlTranslate: rtl, snapGrid } = swiper;\n if (slides.length === 0)\n return;\n if (typeof slides[0].swiperSlideOffset === 'undefined')\n swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl)\n offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiper.size;\n }\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 ?? 0;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset ?? 0;\n }\n const slideSize = slide.swiperSlideSize ?? 0;\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) /\n (slideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter -\n snapGrid[0] +\n (params.centeredSlides ? swiper.minTranslate() : 0) -\n slideOffset) /\n (slideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1) ||\n (slideAfter > 1 && slideAfter <= swiper.size) ||\n (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\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\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 static extendedDefaults;\n static defaults;\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 &&\n args[0] !== null &&\n typeof args[0] === 'object' &&\n Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n }\n else {\n [el, params] = args;\n }\n if (!params)\n params = {};\n params = extend({}, params);\n if (el && !params.el)\n params.el = el;\n if (params.el &&\n typeof params.el === 'string' &&\n typeof document !== 'undefined' &&\n document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach((containerEl) => {\n const newParams = extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({ userAgent: params.userAgent ?? undefined });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...(swiper.__modules__ || [])];\n if (params.modules && Array.isArray(params.modules)) {\n params.modules.forEach((mod) => {\n const fn = mod;\n if (typeof fn === 'function' && swiper.modules.indexOf(fn) < 0) {\n swiper.modules.push(fn);\n }\n });\n }\n const allModulesParams = {};\n swiper.modules.forEach((mod) => {\n mod({\n params: 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 // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\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 // add event listeners\n if (swiper.params && swiper.params.on) {\n const onHandlers = swiper.params.on;\n Object.keys(onHandlers).forEach((eventName) => {\n const handler = onHandlers[eventName];\n if (handler)\n swiper.on(eventName, handler);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null,\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n });\n swiper.emit('_swiper');\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n // Return app instance\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // oxfmt-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 /**\n * !INTERNAL\n */\n isHorizontal() {\n return this.params.direction === 'horizontal';\n }\n isVertical() {\n return this.params.direction === 'vertical';\n }\n cssOverflowAdjustment() {\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n }\n getSlideIndex(slideEl) {\n const { slidesEl, params } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - (firstSlideIndex ?? 0);\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.find((slideEl) => Number(slideEl.getAttribute('data-swiper-slide-index')) === index));\n }\n getSlideIndexWhenGrid(index) {\n if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n if (this.params.grid.fill === 'column') {\n index = Math.floor(index / this.params.grid.rows);\n }\n else if (this.params.grid.fill === 'row') {\n index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n }\n }\n return index;\n }\n recalcSlides() {\n const { slidesEl, params } = this;\n this.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n /**\n * Enable Swiper (if it was disabled)\n */\n enable() {\n if (this.enabled)\n return;\n this.enabled = true;\n if (this.params.grabCursor) {\n this.setGrabCursor();\n }\n this.emit('enable');\n }\n /**\n * Disable Swiper (if it was enabled). When Swiper is disabled, it will hide all navigation elements and won't respond to any events and interactions\n */\n disable() {\n if (!this.enabled)\n return;\n this.enabled = false;\n if (this.params.grabCursor) {\n this.unsetGrabCursor();\n }\n this.emit('disable');\n }\n /**\n * Set Swiper translate progress (from 0 to 1). Where 0 - its initial position (offset) on first slide, and 1 - its maximum position (offset) on last slide\n *\n * @param progress Swiper translate progress (from 0 to 1).\n * @param speed Transition duration (in ms).\n */\n setProgress(progress, speed) {\n progress = Math.min(Math.max(progress, 0), 1);\n const min = this.minTranslate();\n const max = this.maxTranslate();\n const current = (max - min) * progress + min;\n this.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n this.updateActiveIndex();\n this.updateSlidesClasses();\n }\n emitContainerClasses() {\n if (!this.params._emitClasses || !this.el)\n return;\n const cls = this.el.className.split(' ').filter((className) => {\n return (className.indexOf('swiper') === 0 ||\n className.indexOf(this.params.containerModifierClass) === 0);\n });\n this.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n if (this.destroyed)\n return '';\n return slideEl.className\n .split(' ')\n .filter((className) => {\n return (className.indexOf('swiper-slide') === 0 ||\n className.indexOf(this.params.slideClass) === 0);\n })\n .join(' ');\n }\n emitSlidesClasses() {\n if (!this.params._emitClasses || !this.el)\n return;\n const updates = [];\n this.slides.forEach((slideEl) => {\n const classNames = this.getSlideClasses(slideEl);\n updates.push({ slideEl, classNames });\n this.emit('_slideClass', slideEl, classNames);\n });\n this.emit('_slideClasses', updates);\n }\n /**\n * Get dynamically calculated amount of slides per view, useful only when slidesPerView set to `auto`\n */\n slidesPerViewDynamic(view = 'current', exact = false) {\n const { params, slides, slidesGrid, slidesSizesGrid, size: swiperSize, activeIndex } = this;\n let spv = 1;\n if (typeof params.slidesPerView === 'number')\n return params.slidesPerView;\n // container not measured yet — centered branch below would never break and return ~slides.length (#7586)\n if (!swiperSize)\n return spv;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize ?? 0) : 0;\n let breakLoop = false;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize ?? 0);\n spv += 1;\n if (slideSize > swiperSize)\n breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize ?? 0;\n spv += 1;\n if (slideSize > swiperSize)\n breakLoop = true;\n }\n }\n }\n else if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact\n ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize\n : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\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 return spv;\n }\n /**\n * You should call it after you add/remove slides\n * manually, or after you hide/show it, or do any\n * custom DOM modifications with Swiper\n * This method also includes subcall of the following\n * methods which you can use separately:\n */\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed)\n return;\n const { snapGrid, params } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n if (params.lazyPreload) {\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach((imageEl) => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n }\n swiper.updateSize();\n // A hidden container may not have a size yet. Defer layout and index updates\n // until it can be measured (or an explicit width/height is supplied).\n if (typeof swiper.size === 'undefined') {\n swiper.emit('update');\n return;\n }\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?.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n }\n else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) &&\n swiper.isEnd &&\n !params.centeredSlides) {\n const slidesLength = swiper.virtual && params.virtual?.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n translated = swiper.slideTo(slidesLength - 1, 0, false, true);\n }\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 /**\n * Changes slider direction from horizontal to vertical and back.\n *\n * @param direction New direction. If not specified, then will automatically changed to opposite direction\n * @param needUpdate Will call swiper.update(). Default true\n */\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection ||\n (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 // RTL only inverts the translate axis while horizontal, so recompute the flag here —\n // a stale `true` flips the sign of every translate read on a vertical slider.\n swiper.rtlTranslate = newDirection === 'horizontal' && swiper.rtl;\n swiper.slides.forEach((slideEl) => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n }\n else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate)\n swiper.update();\n return swiper;\n }\n /**\n * Changes slider language\n *\n * @param direction New direction. Should be `rtl` or `ltr`\n */\n changeLanguageDirection(direction) {\n const swiper = this;\n if ((swiper.rtl && direction === 'rtl') || (!swiper.rtl && direction === 'ltr'))\n 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 }\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)\n return true;\n // No DOM (SSR / Node) — nothing to mount to.\n if (typeof document === 'undefined')\n return false;\n // Find el (params.el can be a CSSSelector, HTMLElement, or undefined)\n const initialEl = element ?? swiper.params.el;\n let el = null;\n if (typeof initialEl === 'string') {\n el = document.querySelector(initialEl);\n }\n else if (isHTMLElement(initialEl)) {\n el = initialEl;\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n const parent = el.parentNode;\n if (parent &&\n parent.host &&\n parent.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot) {\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 const host = swiper.isElement ? el.parentNode.host : null;\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !host.slideSlots ? host : wrapperEl,\n hostEl: swiper.isElement ? host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' &&\n (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box',\n });\n return true;\n }\n /**\n * Initialize slider\n */\n init(el) {\n const swiper = this;\n if (swiper.initialized)\n return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false)\n return swiper;\n swiper.emit('beforeInit');\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n // Add Classes\n swiper.addClasses();\n // Update size\n swiper.updateSize();\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual?.enabled) {\n swiper.slideTo((swiper.params.initialSlide ?? 0) + (swiper.virtual.slidesBefore ?? 0), 0, swiper.params.runCallbacksOnInit, false, true);\n }\n else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate(undefined, true);\n }\n // Attach events\n swiper.attachEvents();\n if (swiper.params.lazyPreload) {\n const lazyElements = [\n ...swiper.el.querySelectorAll('[loading=\"lazy\"]'),\n ];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach((imageEl) => {\n // Not-yet-complete images are handled by the delegated `load`/`error` listener in attachEvents()\n if (imageEl.complete)\n processLazyPreloader(swiper, imageEl);\n });\n }\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n /**\n * Destroy slider instance and detach all events listeners\n *\n * @param deleteInstance Set it to false (by default it is true) to not to delete Swiper instance\n * @param cleanStyles Set it to true (by default it is true) and all custom styles will be removed from slides, wrapper and container.\n * Useful if you need to destroy Swiper and to init again with new options or in different direction\n */\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const { params, el, wrapperEl, slides } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n // Init Flag\n swiper.initialized = false;\n // Detach events\n swiper.detachEvents();\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach((slideEl) => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach((eventName) => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__)\n 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.defineProperty(Swiper, 'extendedDefaults', {\n get() {\n return extendedDefaults;\n },\n});\nObject.defineProperty(Swiper, 'defaults', {\n get() {\n return defaults;\n },\n});\n// Attach prototype-mixin method groups onto Swiper.prototype. Each group is a\n// plain record of method-name → function; we copy them across as-is.\nconst prototypeRecord = prototypes;\nconst swiperProto = Swiper.prototype;\nObject.keys(prototypeRecord).forEach((prototypeGroup) => {\n const group = prototypeRecord[prototypeGroup];\n Object.keys(group).forEach((protoMethod) => {\n swiperProto[protoMethod] = group[protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n"],"names":["supportCached","deviceCached","browserCached","getSupport","window","touch","navigator","maxTouchPoints","getDevice","overrides","userAgent","ios","android","support","platform","ua","device","isAndroid","test","isIPhoneOrIPod","isIPadDirect","isIPadMasquerade","isIPad","os","calcDevice","getBrowser","isSafari","isWebView","need3dFix","uaLower","toLowerCase","includes","calcBrowser","processLazyPreloader","swiper","imageEl","destroyed","params","lazyPreload","slideEl","closest","isElement","slideClass","lazyEl","querySelector","lazyPreloaderClass","shadowRoot","requestAnimationFrame","innerLazy","lazyPreloaderManaged","remove","unlazy","index","slides","removeAttribute","preload","amount","lazyPreloadPrevNext","len","length","Math","min","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","push","Array","from","map","_","i","forEach","undefined","column","slideIndexLastInView","rewind","loop","realIndex","max","isGridEnabled","breakpoints","setBreakpoint","this","initialized","el","Object","keys","breakpointsBase","breakpointContainer","document","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","grabCursor","isGrabCursor","wasEnabled","enabled","classList","containerModifierClass","emitContainerClasses","add","fill","unsetGrabCursor","setGrabCursor","moduleOpt","opts","prop","bpOpts","paramsOpts","wasModuleEnabled","isModuleEnabled","moduleApi","disable","enable","directionChanged","direction","needsReLoop","wasLoop","changeDirection","extend","isEnabled","hasLoop","assign","allowTouchMove","allowSlideNext","allowSlidePrev","emit","loopDestroy","updateSlides","loopCreate","base","containerEl","currentHeight","innerHeight","clientHeight","points","point","indexOf","minRatio","parseFloat","substr","value","sort","a","b","parseInt","String","matchMedia","matches","clientWidth","checkOverflow$1","checkOverflow","isLocked","wasLocked","slidesOffsetBefore","lastSlideIndex","lastSlideRightEdge","slidesGrid","slidesSizesGrid","size","snapGrid","isEnd","classes","addClasses","classNames","rtl","suffixes","entries","prefix","resultClasses","item","prepareClasses","freeMode","autoheight","autoHeight","cssMode","centered","centeredSlides","watchSlidesProgress","removeClasses","defaults","init","oneWayMovement","swiperElementNodeName","touchEventsTarget","initialSlide","speed","updateOnWindowResize","resizeObserver","nested","createElements","eventsPrefix","focusableElements","width","height","preventInteractionOnTransition","url","edgeSwipeDetection","edgeSwipeThreshold","setWrapperSize","virtualTranslate","effect","spaceBetween","slidesPerGroup","slidesPerGroupSkip","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","snapToSlideEdge","watchOverflow","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","threshold","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","resistance","resistanceRatio","preventClicks","preventClicksPropagation","slideToClickedSlide","loopAddBlankSlides","loopAdditionalSlides","loopPreventsSliding","swipeHandler","noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","maxBackfaceHiddenSlides","slideBlankClass","slideActiveClass","slideVisibleClass","slideFullyVisibleClass","slideNextClass","slidePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","eventsEmitter","on","events","handler","priority","self","eventsListeners","method","split","event","once","onceHandler","args","off","__emitterProxy","apply","onAny","eventsAnyListeners","offAny","splice","eventHandler","data","context","isArray","slice","unshift","onClick","e","allowClick","preventDefault","animating","stopPropagation","stopImmediatePropagation","onDocumentTouchStart","documentTouchHandlerProceeded","style","touchAction","onLoad","target","type","update","onResize","offsetWidth","wrapperEl","snapType","scrollSnapType","isVirtual","virtual","updateSize","updateSlidesClasses","isVirtualLoop","isBeginning","slideToLoop","slideTo","slidesLength","onScroll","autoplay","running","paused","clearTimeout","resizeTimeout","setTimeout","resume","measureSize","isHorizontal","isVertical","elementStyle","Number","isNaN","isResizePending","ResizeObserver","isH","clientSize","_clientSize","measured","rtlTranslate","newProgress","previousTranslate","translate","scrollLeft","scrollTop","updateActiveIndex","translatesDiff","maxTranslate","minTranslate","progress","updateProgress","onTouchEnd","touchEventsData","originalEvent","found","changedTouches","find","t","identifier","touchId","pointerId","browser","startEventPath","lastMoveEvent","touches","pointerType","allowTouchCallbacks","isTouched","isMoved","startMoving","touchEndTime","now","timeDiff","touchStartTime","pathTree","path","composedPath","updateClickedSlide","lastClickTime","nextTick","swipeDirection","diff","loopSwapReset","currentTranslate","startTranslate","currentPos","swipeToLast","stopIndex","groupSize","increment","rewindFirstIndex","rewindLastIndex","ratio","abs","navigation","nextEl","prevEl","onTouchMove","wrapped","targetTouch","isScrolling","node","child","pageX","pageY","preventedByNestedSwiper","startX","startY","currentX","currentY","activeElement","blur","previousX","previousY","diffX","diffY","sqrt","atan2","PI","preventTouchMoveFromPointerMove","cancelable","touchesDiff","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","loopFix","getTranslate","setTransition","evt","CustomEvent","bubbles","detail","bySwiperTouchMove","dispatchEvent","allowMomentumBounce","Date","getTime","_loopSwapReset","allowThresholdMove","disableParentSwiper","setTranslate","activeSlideIndex","preventEdgeSwipe","innerWidth","onTouchStart","pe","targetTouches","targetEl","elementIsChildOf","mouseLike","which","button","swipingClassHasValue","eventPath","isTargetShadow","selector","__closestFrom","cur","assignedSlot","getRootNode","root","host","nodeName","shouldPreventDefault","isContentEditable","capture","domMethod","swiperMethod","passive","subscribe","slideRealIndex","initial","slidesEl","initSlides","elementChildren","setAttribute","gridEnabled","recalcSlides","clearBlankSlides","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","createElement","append","showWarning","bothDirections","options","activeSlideIndexParam","byController","byMousewheel","__loopFixInProgress__","virtualSlidesLength","virtualSlidesBefore","slidesBefore","snapIndex","resolveOffset","call","slidesGridStep","offsetSlidesBefore","offsetSlidesAfter","loopedSlides","prependSlidesIndexes","appendSlidesIndexes","cols","floor","isInitialOverflow","getSlideIndex","contains","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","j","slide","slideIndex","__preventObserver__","swiperLoopMoveDOM","prepend","updateSlide","updateSlidesOffset","currentSlideTranslate","shift","controlled","controller","control","loopParams","c","constructor","newSlidesOrder","loopSlideEl","swiperSlideIndex","getAttribute","moduleExtendParams","allModulesParams","obj","moduleParamName","moduleParams","auto","runCallbacks","internal","previousIndex","skip","normalizedTranslate","normalizedGrid","normalizedGridNext","updateAutoHeight","transitionStart","transitionEnd","_immediateVirtual","_cssModeVirtualInitialSet","scrollTo","behavior","onSlideToWrapperTransitionEnd","removeEventListener","addEventListener","newIndex","targetSlideIndex","targetSlideEl","getSlideIndexByData","needLoopFix","halfView","slideNext","perGroup","_clientLeft","clientLeft","slidePrev","normalize","val","normalizedSnapGrid","isFreeMode","prevSnap","prevSnapIndex","snap","prevIndex","prevSlidesInView","lastIndex","slideReset","slideToClosest","currentSnap","clickedSlide","clickedIndex","slideToIndex","getSlideIndexWhenGrid","slideSelector","isGrid","transitionEmit","step","dir","axis","cssOverflowAdjustment","x","y","transform","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","toggleSlideClasses$1","condition","className","toggleSlideClasses","getDirectionPropertyValue","label","getPropertyValue","getDirectionLabel","wrongRTL","previousSlidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","swiperSize","slidePosition","prevSlideSize","replace","virtualSize","marginLeft","marginRight","marginBottom","marginTop","setCSSProperty","unsetSlides","slideSize","shouldResetSlideSize","filter","key","bp","slidesPerViewAutoSlideSize","slideStyles","getComputedStyle","currentTransform","currentWebKitTransform","webkitTransform","elementOuterSize","paddingLeft","paddingRight","boxSizing","swiperSlideSize","updateWrapperSize","isFractionalSlidesPerView","shouldSnapToSlideEdge","lastAllowedSnapIndex","minVisibleSlides","accumulatedSize","newSlidesGrid","slidesGridItem","virtualLoopCount","slidesAfter","groups","allSlidesSize","slideSizeValue","maxSnap","allSlidesOffset","addToSnapGrid","addToSlidesGrid","v","backFaceHiddenClass","hasClassBackfaceClassAdded","activeSlides","newHeight","getSlideByIndex","visibleSlides","offsetHeight","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","originalProgress","multiplier","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","getFilteredSlide","activeSlide","prevSlide","nextSlide","virtualSlides","elementNextAll","elementPrevAll","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","getActiveIndexByTranslate","firstSlideInColumn","__lastEmittedRealIndex__","pathEl","slideFound","prototypes","transition","duration","transitionDuration","transitionDelay","moving","cursor","attachEvents","bind","detachEvents","extendedDefaults","Swiper","static","prototype","toString","querySelectorAll","swipers","newParams","__swiper__","modules","__modules__","mod","fn","extendParams","swiperParams","passedParams","onHandlers","eventName","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","property","elementIndex","setProgress","current","cls","join","getSlideClasses","updates","view","exact","spv","breakLoop","complete","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","element","mounted","initialEl","isHTMLElement","parent","parentNode","toUpperCase","getWrapperSelector","trim","getWrapper","slideSlots","hostEl","lazyElements","destroy","deleteInstance","cleanStyles","deleteProps","extendDefaults","newDefaults","installModule","use","module","m","defineProperty","get","prototypeRecord","swiperProto","prototypeGroup","group","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","observedWidth","observedHeight","newWidth","contentBoxSize","contentRect","box","inlineSize","blockSize","observe","createObserver","cancelAnimationFrame","unobserve","observers","attach","ObserverFunc","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","elementParents","disconnect"],"mappings":"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","x_google_ignoreList":[0]}
|