{"version":3,"file":"user.js","mappings":"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","sources":["webpack://app/./app/javascript/libs/accordion.js","webpack://app/./node_modules/swiper/shared/utils.mjs","webpack://app/./node_modules/swiper/shared/swiper-core.mjs","webpack://app/./node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack://app/./node_modules/swiper/modules/navigation.mjs","webpack://app/./node_modules/swiper/shared/classes-to-selector.mjs","webpack://app/./node_modules/swiper/modules/pagination.mjs","webpack://app/./node_modules/swiper/modules/controller.mjs","webpack://app/./node_modules/swiper/modules/a11y.mjs","webpack://app/./node_modules/swiper/modules/hash-navigation.mjs","webpack://app/./node_modules/swiper/modules/manipulation.mjs","webpack://app/./node_modules/swiper/shared/effect-init.mjs","webpack://app/./node_modules/swiper/shared/effect-target.mjs","webpack://app/./node_modules/swiper/shared/effect-virtual-transition-end.mjs","webpack://app/./node_modules/swiper/shared/create-shadow.mjs","webpack://app/./node_modules/swiper/modules/effect-flip.mjs","webpack://app/./node_modules/swiper/swiper-bundle.mjs","webpack://app/./node_modules/swiper/modules/virtual.mjs","webpack://app/./node_modules/swiper/modules/keyboard.mjs","webpack://app/./node_modules/swiper/modules/mousewheel.mjs","webpack://app/./node_modules/swiper/modules/scrollbar.mjs","webpack://app/./node_modules/swiper/modules/parallax.mjs","webpack://app/./node_modules/swiper/modules/zoom.mjs","webpack://app/./node_modules/swiper/modules/history.mjs","webpack://app/./node_modules/swiper/modules/autoplay.mjs","webpack://app/./node_modules/swiper/modules/thumbs.mjs","webpack://app/./node_modules/swiper/modules/free-mode.mjs","webpack://app/./node_modules/swiper/modules/grid.mjs","webpack://app/./node_modules/swiper/modules/effect-fade.mjs","webpack://app/./node_modules/swiper/modules/effect-cube.mjs","webpack://app/./node_modules/swiper/modules/effect-coverflow.mjs","webpack://app/./node_modules/swiper/modules/effect-creative.mjs","webpack://app/./node_modules/swiper/modules/effect-cards.mjs","webpack://app/./app/javascript/user/carousel.js","webpack://app/./app/javascript/user/accordion.js","webpack://app/./app/javascript/user.js","webpack://app/./app/javascript/user/smooth-scroll.js","webpack://app/./app/javascript/user/page-top-btn.js","webpack://app/./app/javascript/user/tab-switch.js"],"sourcesContent":["// slideUp\nexport const slideUp = (el, duration = 300) => {\n  el.style.height = el.offsetHeight + \"px\"\n  el.offsetHeight\n  el.style.transitionProperty = \"height, margin, padding\"\n  el.style.transitionDuration = duration + \"ms\"\n  el.style.transitionTimingFunction = \"ease\"\n  el.style.overflow = \"hidden\"\n  el.style.height = 0\n  el.style.paddingTop = 0\n  el.style.paddingBottom = 0\n  el.style.marginTop = 0\n  el.style.marginBottom = 0\n  setTimeout(() => {\n    el.style.display = \"none\"\n    el.style.removeProperty(\"height\")\n    el.style.removeProperty(\"padding-top\")\n    el.style.removeProperty(\"padding-bottom\")\n    el.style.removeProperty(\"margin-top\")\n    el.style.removeProperty(\"margin-bottom\")\n    el.style.removeProperty(\"overflow\")\n    el.style.removeProperty(\"transition-duration\")\n    el.style.removeProperty(\"transition-property\")\n    el.style.removeProperty(\"transition-timing-function\")\n  }, duration)\n}\n\n// slideDown\nexport const slideDown = (el, duration = 300) => {\n  el.style.removeProperty(\"display\")\n  let display = window.getComputedStyle(el).display\n  if (display === \"none\") {\n    display = \"block\"\n  }\n  el.style.display = display\n  let height = el.offsetHeight\n  el.style.overflow = \"hidden\"\n  el.style.height = 0\n  el.style.paddingTop = 0\n  el.style.paddingBottom = 0\n  el.style.marginTop = 0\n  el.style.marginBottom = 0\n  el.offsetHeight\n  el.style.transitionProperty = \"height, margin, padding\"\n  el.style.transitionDuration = duration + \"ms\"\n  el.style.transitionTimingFunction = \"ease\"\n  el.style.height = height + \"px\"\n  el.style.removeProperty(\"padding-top\")\n  el.style.removeProperty(\"padding-bottom\")\n  el.style.removeProperty(\"margin-top\")\n  el.style.removeProperty(\"margin-bottom\")\n  setTimeout(() => {\n    el.style.removeProperty(\"height\")\n    el.style.removeProperty(\"overflow\")\n    el.style.removeProperty(\"transition-duration\")\n    el.style.removeProperty(\"transition-property\")\n    el.style.removeProperty(\"transition-timing-function\")\n  }, duration)\n}\n\n// slideToggle\nexport const slideToggle = (el, duration = 300) => {\n  if (window.getComputedStyle(el).display === \"none\") {\n    return slideDown(el, duration)\n  } else {\n    return slideUp(el, duration)\n  }\n}\n","function classesToTokens(classes = '') {\n    return classes\n        .trim()\n        .split(' ')\n        .filter((c) => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n    Object.keys(obj).forEach((key) => {\n        try {\n            obj[key] = null;\n        }\n        catch {\n            // no getter for object\n        }\n        try {\n            delete obj[key];\n        }\n        catch {\n            // something got wrong\n        }\n    });\n}\nfunction nextTick(callback, delay = 0) {\n    return setTimeout(callback, delay);\n}\nfunction now() {\n    return Date.now();\n}\nfunction getComputedStyle(el) {\n    return window.getComputedStyle(el, null);\n}\nfunction getTranslate(el, axis = 'x') {\n    const style = getComputedStyle(el);\n    const transform = style.transform || style.webkitTransform;\n    if (!transform || transform === 'none')\n        return 0;\n    const matrix = new DOMMatrixReadOnly(transform);\n    return axis === 'x' ? matrix.m41 : matrix.m42;\n}\nfunction isObject(o) {\n    // `constructor === Object` would be false for a plain object created in another realm\n    // (params built in the parent page, Swiper running inside an iframe), which makes extend()\n    // replace a nested defaults object instead of merging into it.\n    return (typeof o === 'object' &&\n        o !== null &&\n        !!o.constructor &&\n        Object.prototype.toString.call(o).slice(8, -1) === 'Object');\n}\nfunction isHTMLElement(el) {\n    // A bare `instanceof HTMLElement` is false for an element from another window (same-origin\n    // iframe, e.g. the WordPress block editor canvas), so check against the element's own realm.\n    if (!el || typeof el !== 'object')\n        return false;\n    const view = el.ownerDocument?.defaultView;\n    const Ctor = view?.HTMLElement ?? (typeof HTMLElement !== 'undefined' ? HTMLElement : undefined);\n    return !!Ctor && el instanceof Ctor;\n}\nfunction isNode(node) {\n    if (typeof HTMLElement !== 'undefined' && node instanceof HTMLElement)\n        return true;\n    return (!!node &&\n        typeof node === 'object' &&\n        (node.nodeType === 1 || node.nodeType === 11));\n}\nfunction extend(target, ...sources) {\n    const to = Object(target);\n    for (let i = 0; i < sources.length; i += 1) {\n        const nextSource = sources[i];\n        if (nextSource === undefined || nextSource === null || isNode(nextSource))\n            continue;\n        const sourceObj = nextSource;\n        const keysArray = Object.keys(Object(sourceObj));\n        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n            const nextKey = keysArray[nextIndex];\n            if (nextKey === '__proto__' || nextKey === 'constructor' || nextKey === 'prototype') {\n                continue;\n            }\n            const desc = Object.getOwnPropertyDescriptor(sourceObj, nextKey);\n            if (!desc || !desc.enumerable)\n                continue;\n            const sourceVal = sourceObj[nextKey];\n            if (isObject(to[nextKey]) && isObject(sourceVal)) {\n                if (sourceVal.__swiper__) {\n                    to[nextKey] = sourceVal;\n                }\n                else {\n                    extend(to[nextKey], sourceVal);\n                }\n            }\n            else if (!isObject(to[nextKey]) && isObject(sourceVal)) {\n                to[nextKey] = {};\n                if (sourceVal.__swiper__) {\n                    to[nextKey] = sourceVal;\n                }\n                else {\n                    extend(to[nextKey], sourceVal);\n                }\n            }\n            else {\n                to[nextKey] = sourceVal;\n            }\n        }\n    }\n    return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n    el.style.setProperty(varName, varValue);\n}\nfunction getSlideTransformEl(slideEl) {\n    const direct = slideEl.querySelector('.swiper-slide-transform');\n    if (direct)\n        return direct;\n    if (slideEl.shadowRoot) {\n        const shadowed = slideEl.shadowRoot.querySelector('.swiper-slide-transform');\n        if (shadowed)\n            return shadowed;\n    }\n    return slideEl;\n}\nfunction elementChildren(element, selector = '') {\n    const children = [...element.children];\n    if (element instanceof HTMLSlotElement) {\n        children.push(...element.assignedElements());\n    }\n    return selector ? children.filter((el) => el.matches(selector)) : children;\n}\nfunction elementIsChildOfSlot(el, slot) {\n    const queue = [slot];\n    while (queue.length > 0) {\n        const cur = queue.shift();\n        if (el === cur)\n            return true;\n        queue.push(...cur.children, ...(cur.shadowRoot ? cur.shadowRoot.children : []), ...(cur.assignedElements\n            ? cur.assignedElements()\n            : []));\n    }\n    return false;\n}\nfunction elementIsChildOf(el, parent) {\n    let isChild = parent.contains(el);\n    if (!isChild && parent instanceof HTMLSlotElement) {\n        const children = [...parent.assignedElements()];\n        isChild = children.includes(el);\n        if (!isChild)\n            isChild = elementIsChildOfSlot(el, parent);\n    }\n    return isChild;\n}\nfunction showWarning(text) {\n    try {\n        console.warn(text);\n    }\n    catch {\n        // err\n    }\n}\nfunction createElement(tag, classes = []) {\n    const el = document.createElement(tag);\n    el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n    return el;\n}\n// Viewport-relative on purpose: every caller either compares against viewport quantities\n// or adds window.scrollX/Y itself, so folding the scroll offset in here double-counts.\nfunction elementOffset(el) {\n    const box = el.getBoundingClientRect();\n    return {\n        top: box.top - (el.clientTop || 0),\n        left: box.left - (el.clientLeft || 0),\n    };\n}\nfunction elementPrevAll(el, selector) {\n    const prevEls = [];\n    let prev = el.previousElementSibling;\n    while (prev) {\n        if (!selector || prev.matches(selector))\n            prevEls.push(prev);\n        prev = prev.previousElementSibling;\n    }\n    return prevEls;\n}\nfunction elementNextAll(el, selector) {\n    const nextEls = [];\n    let next = el.nextElementSibling;\n    while (next) {\n        if (!selector || next.matches(selector))\n            nextEls.push(next);\n        next = next.nextElementSibling;\n    }\n    return nextEls;\n}\nfunction elementStyle(el, prop) {\n    return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n    if (!el || !el.parentNode)\n        return undefined;\n    return [...el.parentNode.children].indexOf(el);\n}\nfunction elementParents(el, selector) {\n    const parents = [];\n    let parent = el.parentElement;\n    while (parent) {\n        if (!selector || parent.matches(selector))\n            parents.push(parent);\n        parent = parent.parentElement;\n    }\n    return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n    if (!callback)\n        return;\n    el.addEventListener('transitionend', function fireCallBack(e) {\n        if (e.target !== el)\n            return;\n        el.removeEventListener('transitionend', fireCallBack);\n        callback.call(el, e);\n    });\n}\nfunction elementOuterSize(el, size, includeMargins) {\n    {\n        const style = window.getComputedStyle(el, null);\n        return (el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] +\n            parseFloat(style.getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) +\n            parseFloat(style.getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom')));\n    }\n}\nfunction makeElementsArray(el) {\n    return (Array.isArray(el) ? el : [el]).filter((e) => !!e);\n}\nfunction getRotateFix(swiper) {\n    return (v) => {\n        if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n            return v + 0.001;\n        }\n        return v;\n    };\n}\nfunction setInnerHTML(el, html = '') {\n    const tt = globalThis.trustedTypes;\n    if (typeof tt !== 'undefined') {\n        el.innerHTML = tt.createPolicy('html', { createHTML: (s) => s }).createHTML(html);\n    }\n    else {\n        el.innerHTML = html;\n    }\n}\n\nexport { createElement as a, elementIndex as b, classesToTokens as c, deleteProps as d, elementChildren as e, elementIsChildOf as f, elementNextAll as g, elementOffset as h, elementOuterSize as i, elementParents as j, elementPrevAll as k, elementStyle as l, elementTransitionEnd as m, extend as n, getRotateFix as o, getSlideTransformEl as p, getTranslate as q, isHTMLElement as r, isObject as s, makeElementsArray as t, nextTick as u, now as v, setCSSProperty as w, setInnerHTML as x, showWarning as y };\n","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","import { e as elementChildren, a as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n    const target = (params ?? {});\n    const original = (originalParams ?? {});\n    if (swiper.params.createElements) {\n        Object.keys(checkProps).forEach((key) => {\n            if (!target[key] && target.auto === true) {\n                let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n                if (!element) {\n                    element = createElement('div', checkProps[key]);\n                    element.className = checkProps[key];\n                    swiper.el.append(element);\n                }\n                target[key] = element;\n                original[key] = element;\n            }\n        });\n    }\n    return target;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { t as makeElementsArray, x as setInnerHTML } from '../shared/utils.mjs';\n\nconst arrowSvg = `<svg class=\"swiper-navigation-icon\" width=\"11\" height=\"20\" viewBox=\"0 0.28 11 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\" fill=\"currentColor\"/></svg>`;\nconst Navigation = ({ swiper, extendParams, on, emit }) => {\n    extendParams({\n        navigation: {\n            nextEl: null,\n            prevEl: null,\n            addIcons: true,\n            hideOnClick: false,\n            disabledClass: 'swiper-button-disabled',\n            hiddenClass: 'swiper-button-hidden',\n            lockClass: 'swiper-button-lock',\n            navigationDisabledClass: 'swiper-navigation-disabled',\n        },\n    });\n    // Initialized as a partial; remaining methods (update, init, destroy,\n    // enable, disable) attach after their definitions below.\n    swiper.navigation = {\n        nextEl: null,\n        prevEl: null,\n        arrowSvg,\n    };\n    function getParams() {\n        return swiper.params.navigation;\n    }\n    function getEl(el) {\n        let res;\n        if (el && typeof el === 'string' && swiper.isElement) {\n            res = (swiper.el.querySelector(el) || swiper.hostEl.querySelector(el));\n            if (res)\n                return res;\n        }\n        if (el) {\n            if (typeof el === 'string')\n                res = [...document.querySelectorAll(el)];\n            if (swiper.params.uniqueNavElements &&\n                typeof el === 'string' &&\n                res &&\n                res.length > 1 &&\n                swiper.el.querySelectorAll(el).length === 1) {\n                res = swiper.el.querySelector(el);\n            }\n            else if (res && res.length === 1) {\n                res = res[0];\n            }\n        }\n        if (el && !res)\n            return el;\n        return res;\n    }\n    function toggleEl(el, disabled) {\n        const params = getParams();\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            if (subEl) {\n                subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n                if (subEl.tagName === 'BUTTON')\n                    subEl.disabled = disabled;\n                if (swiper.params.watchOverflow && swiper.enabled) {\n                    subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n                }\n            }\n        });\n    }\n    function update() {\n        // Update Navigation Buttons\n        const { nextEl, prevEl } = swiper.navigation;\n        if (swiper.params.loop) {\n            toggleEl(prevEl, false);\n            toggleEl(nextEl, false);\n            return;\n        }\n        toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n        toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n    }\n    function onPrevClick(e) {\n        e.preventDefault();\n        if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind)\n            return;\n        swiper.slidePrev();\n        emit('navigationPrev');\n    }\n    function onNextClick(e) {\n        e.preventDefault();\n        if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind)\n            return;\n        swiper.slideNext();\n        emit('navigationNext');\n    }\n    function init() {\n        swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n            nextEl: 'swiper-button-next',\n            prevEl: 'swiper-button-prev',\n        });\n        const params = getParams();\n        if (!(params.nextEl || params.prevEl))\n            return;\n        const nextEl = getEl(params.nextEl);\n        const prevEl = getEl(params.prevEl);\n        Object.assign(swiper.navigation, {\n            nextEl,\n            prevEl,\n        });\n        const nextEls = makeElementsArray(nextEl);\n        const prevEls = makeElementsArray(prevEl);\n        const initButton = (el, dir) => {\n            if (el) {\n                if (params.addIcons &&\n                    el.matches('.swiper-button-next,.swiper-button-prev') &&\n                    !el.querySelector('svg')) {\n                    const tempEl = document.createElement('div');\n                    setInnerHTML(tempEl, arrowSvg);\n                    const svgEl = tempEl.querySelector('svg');\n                    if (svgEl)\n                        el.appendChild(svgEl);\n                    tempEl.remove();\n                }\n                el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n            }\n            if (!swiper.enabled && el) {\n                el.classList.add(...params.lockClass.split(' '));\n            }\n        };\n        nextEls.forEach((el) => initButton(el, 'next'));\n        prevEls.forEach((el) => initButton(el, 'prev'));\n    }\n    function destroy() {\n        const params = getParams();\n        const { nextEl, prevEl } = swiper.navigation;\n        const nextEls = makeElementsArray(nextEl);\n        const prevEls = makeElementsArray(prevEl);\n        const destroyButton = (el, dir) => {\n            el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n            el.classList.remove(...params.disabledClass.split(' '));\n        };\n        nextEls.forEach((el) => destroyButton(el, 'next'));\n        prevEls.forEach((el) => destroyButton(el, 'prev'));\n    }\n    on('init', () => {\n        if (getParams().enabled === false) {\n            disable();\n        }\n        else {\n            init();\n            update();\n        }\n    });\n    on('toEdge fromEdge lock unlock', () => {\n        update();\n    });\n    on('destroy', () => {\n        destroy();\n    });\n    on('enable disable', () => {\n        const params = getParams();\n        const { nextEl, prevEl } = swiper.navigation;\n        const nextEls = makeElementsArray(nextEl);\n        const prevEls = makeElementsArray(prevEl);\n        if (swiper.enabled) {\n            update();\n            return;\n        }\n        [...nextEls, ...prevEls]\n            .filter((el) => !!el)\n            .forEach((el) => el.classList.add(params.lockClass));\n    });\n    on('click', (_s, e) => {\n        const params = getParams();\n        const { nextEl, prevEl } = swiper.navigation;\n        const nextEls = makeElementsArray(nextEl);\n        const prevEls = makeElementsArray(prevEl);\n        const targetEl = e.target;\n        let targetIsButton = prevEls.includes(targetEl) || nextEls.includes(targetEl);\n        if (swiper.isElement && !targetIsButton) {\n            const path = e.composedPath ? e.composedPath() : [];\n            if (path.length) {\n                targetIsButton = path.find((pathEl) => nextEls.includes(pathEl) || prevEls.includes(pathEl));\n            }\n        }\n        if (params.hideOnClick && !targetIsButton) {\n            if (swiper.pagination &&\n                swiper.params.pagination &&\n                swiper.params.pagination.clickable &&\n                (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl)))\n                return;\n            let isHidden;\n            if (nextEls.length) {\n                isHidden = nextEls[0].classList.contains(params.hiddenClass);\n            }\n            else if (prevEls.length) {\n                isHidden = prevEls[0].classList.contains(params.hiddenClass);\n            }\n            if (isHidden === true) {\n                emit('navigationShow');\n            }\n            else {\n                emit('navigationHide');\n            }\n            [...nextEls, ...prevEls]\n                .filter((el) => !!el)\n                .forEach((el) => el.classList.toggle(params.hiddenClass));\n        }\n    });\n    const enable = () => {\n        const params = getParams();\n        swiper.el.classList.remove(...params.navigationDisabledClass.split(' '));\n        init();\n        update();\n    };\n    const disable = () => {\n        const params = getParams();\n        swiper.el.classList.add(...params.navigationDisabledClass.split(' '));\n        destroy();\n    };\n    Object.assign(swiper.navigation, {\n        enable,\n        disable,\n        update,\n        init,\n        destroy,\n    });\n};\n\nexport { Navigation as default };\n","function classesToSelector(classes = '') {\n    return `.${classes\n        .trim()\n        .replace(/([.:!+/()[\\]#>~*^$|=,'\"@{}\\\\])/g, '\\\\$1')\n        .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { t as makeElementsArray, j as elementParents, x as setInnerHTML, i as elementOuterSize, b as elementIndex } from '../shared/utils.mjs';\n\nconst isVirtualEnabled = (swiper) => !!swiper.virtual && !!swiper.params.virtual?.enabled;\nconst isFreeModeEnabled = (swiper) => !!swiper.params.freeMode?.enabled;\n// Slides count for bullets/fraction/progressbar totals: with grid rows the\n// slides that share a column collapse into one snap position.\nconst getSlidesLength = (swiper) => {\n    if (isVirtualEnabled(swiper))\n        return swiper.virtual.slides.length;\n    const gridRows = swiper.params.grid?.rows;\n    if (swiper.grid && gridRows && gridRows > 1) {\n        return swiper.slides.length / Math.ceil(gridRows);\n    }\n    return swiper.slides.length;\n};\nconst Pagination = ({ swiper, extendParams, on, emit }) => {\n    const pfx = 'swiper-pagination';\n    extendParams({\n        pagination: {\n            el: null,\n            bulletElement: 'span',\n            clickable: false,\n            hideOnClick: false,\n            renderBullet: null,\n            renderProgressbar: null,\n            renderFraction: null,\n            renderCustom: null,\n            progressbarOpposite: false,\n            type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n            dynamicBullets: false,\n            dynamicMainBullets: 1,\n            formatFractionCurrent: (number) => number,\n            formatFractionTotal: (number) => number,\n            bulletClass: `${pfx}-bullet`,\n            bulletActiveClass: `${pfx}-bullet-active`,\n            modifierClass: `${pfx}-`,\n            currentClass: `${pfx}-current`,\n            totalClass: `${pfx}-total`,\n            hiddenClass: `${pfx}-hidden`,\n            progressbarFillClass: `${pfx}-progressbar-fill`,\n            progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n            clickableClass: `${pfx}-clickable`,\n            lockClass: `${pfx}-lock`,\n            horizontalClass: `${pfx}-horizontal`,\n            verticalClass: `${pfx}-vertical`,\n            paginationDisabledClass: `${pfx}-disabled`,\n        },\n    });\n    // Initialized as a partial; remaining methods (render, update, init,\n    // destroy, enable, disable) attach after their definitions below.\n    swiper.pagination = {\n        el: null,\n        bullets: [],\n    };\n    let bulletSize;\n    let dynamicBulletIndex = 0;\n    function getParams() {\n        return swiper.params.pagination;\n    }\n    function isPaginationDisabled() {\n        const elParam = getParams().el;\n        return (!elParam ||\n            !swiper.pagination.el ||\n            (Array.isArray(swiper.pagination.el) &&\n                swiper.pagination.el.length === 0));\n    }\n    function setSideBullets(bulletEl, position) {\n        const { bulletActiveClass } = getParams();\n        if (!bulletEl)\n            return;\n        let current = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n        if (current) {\n            current.classList.add(`${bulletActiveClass}-${position}`);\n            current = current[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n            if (current) {\n                current.classList.add(`${bulletActiveClass}-${position}-${position}`);\n            }\n        }\n    }\n    function getMoveDirection(prevIndex, nextIndex, length) {\n        prevIndex = prevIndex % length;\n        nextIndex = nextIndex % length;\n        if (nextIndex === prevIndex + 1) {\n            return 'next';\n        }\n        else if (nextIndex === prevIndex - 1) {\n            return 'previous';\n        }\n        return undefined;\n    }\n    function onBulletClick(e) {\n        const targetEl = e.target;\n        const bulletEl = targetEl.closest(classesToSelector(getParams().bulletClass));\n        if (!bulletEl) {\n            return;\n        }\n        e.preventDefault();\n        const index = (elementIndex(bulletEl) ?? 0) * (swiper.params.slidesPerGroup ?? 1);\n        if (swiper.params.loop) {\n            if (swiper.realIndex === index)\n                return;\n            const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n            if (moveDirection === 'next') {\n                swiper.slideNext();\n            }\n            else if (moveDirection === 'previous') {\n                swiper.slidePrev();\n            }\n            else {\n                swiper.slideToLoop(index);\n            }\n        }\n        else {\n            swiper.slideTo(index);\n        }\n    }\n    function update() {\n        // Render || Update Pagination bullets/items\n        const rtl = swiper.rtl;\n        const params = getParams();\n        if (isPaginationDisabled())\n            return;\n        const els = makeElementsArray(swiper.pagination.el);\n        // Current/Total\n        let current;\n        let previousIndex;\n        const slidesLength = getSlidesLength(swiper);\n        const total = swiper.params.loop\n            ? Math.ceil(slidesLength / (swiper.params.slidesPerGroup ?? 1))\n            : swiper.snapGrid.length;\n        if (swiper.params.loop) {\n            previousIndex = swiper.previousRealIndex || 0;\n            current =\n                (swiper.params.slidesPerGroup ?? 1) > 1\n                    ? Math.floor(swiper.realIndex / (swiper.params.slidesPerGroup ?? 1))\n                    : swiper.realIndex;\n        }\n        else if (typeof swiper.snapIndex !== 'undefined') {\n            current = swiper.snapIndex;\n            previousIndex = swiper.previousSnapIndex;\n        }\n        else {\n            previousIndex = swiper.previousIndex || 0;\n            current = swiper.activeIndex || 0;\n        }\n        // Types\n        if (params.type === 'bullets' &&\n            swiper.pagination.bullets &&\n            swiper.pagination.bullets.length > 0) {\n            const bullets = swiper.pagination.bullets;\n            let firstIndex = 0;\n            let lastIndex = 0;\n            let midIndex = 0;\n            if (params.dynamicBullets) {\n                bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height');\n                const dim = swiper.isHorizontal() ? 'width' : 'height';\n                els.forEach((subEl) => {\n                    subEl.style[dim] = `${(bulletSize ?? 0) * (params.dynamicMainBullets + 4)}px`;\n                });\n                if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n                    dynamicBulletIndex += current - (previousIndex || 0);\n                    if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n                        dynamicBulletIndex = params.dynamicMainBullets - 1;\n                    }\n                    else if (dynamicBulletIndex < 0) {\n                        dynamicBulletIndex = 0;\n                    }\n                }\n                firstIndex = Math.max(current - dynamicBulletIndex, 0);\n                lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n                midIndex = (lastIndex + firstIndex) / 2;\n            }\n            bullets.forEach((bulletEl) => {\n                const classesToRemove = [\n                    '',\n                    '-next',\n                    '-next-next',\n                    '-prev',\n                    '-prev-prev',\n                    '-main',\n                ]\n                    .map((suffix) => `${params.bulletActiveClass}${suffix}`)\n                    .flatMap((s) => (typeof s === 'string' && s.includes(' ') ? s.split(' ') : [s]));\n                bulletEl.classList.remove(...classesToRemove);\n            });\n            if (els.length > 1) {\n                bullets.forEach((bullet) => {\n                    const bulletIndex = elementIndex(bullet);\n                    if (bulletIndex === current) {\n                        bullet.classList.add(...params.bulletActiveClass.split(' '));\n                    }\n                    else if (swiper.isElement) {\n                        bullet.setAttribute('part', 'bullet');\n                    }\n                    if (params.dynamicBullets && bulletIndex !== undefined) {\n                        if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                            bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n                        }\n                        if (bulletIndex === firstIndex) {\n                            setSideBullets(bullet, 'prev');\n                        }\n                        if (bulletIndex === lastIndex) {\n                            setSideBullets(bullet, 'next');\n                        }\n                    }\n                });\n            }\n            else {\n                const bullet = bullets[current];\n                if (bullet) {\n                    bullet.classList.add(...params.bulletActiveClass.split(' '));\n                }\n                if (swiper.isElement) {\n                    bullets.forEach((bulletEl, bulletIndex) => {\n                        bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n                    });\n                }\n                if (params.dynamicBullets) {\n                    const firstDisplayedBullet = bullets[firstIndex];\n                    const lastDisplayedBullet = bullets[lastIndex];\n                    for (let i = firstIndex; i <= lastIndex; i += 1) {\n                        if (bullets[i]) {\n                            bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n                        }\n                    }\n                    setSideBullets(firstDisplayedBullet, 'prev');\n                    setSideBullets(lastDisplayedBullet, 'next');\n                }\n            }\n            if (params.dynamicBullets) {\n                const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n                const bulletsOffset = ((bulletSize ?? 0) * dynamicBulletsLength - (bulletSize ?? 0)) / 2 -\n                    midIndex * (bulletSize ?? 0);\n                const offsetProp = rtl ? 'right' : 'left';\n                const positionDim = swiper.isHorizontal() ? offsetProp : 'top';\n                bullets.forEach((bullet) => {\n                    bullet.style[positionDim] = `${bulletsOffset}px`;\n                });\n            }\n        }\n        els.forEach((subEl, subElIndex) => {\n            if (params.type === 'fraction') {\n                subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach((fractionEl) => {\n                    fractionEl.textContent = String(params.formatFractionCurrent(current + 1));\n                });\n                subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach((totalEl) => {\n                    totalEl.textContent = String(params.formatFractionTotal(total));\n                });\n            }\n            if (params.type === 'progressbar') {\n                let progressbarDirection;\n                if (params.progressbarOpposite) {\n                    progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n                }\n                else {\n                    progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n                }\n                const scale = (current + 1) / total;\n                let scaleX = 1;\n                let scaleY = 1;\n                if (progressbarDirection === 'horizontal') {\n                    scaleX = scale;\n                }\n                else {\n                    scaleY = scale;\n                }\n                subEl\n                    .querySelectorAll(classesToSelector(params.progressbarFillClass))\n                    .forEach((progressEl) => {\n                    progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n                    progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n                });\n            }\n            if (params.type === 'custom' && params.renderCustom) {\n                setInnerHTML(subEl, params.renderCustom(swiper, current + 1, total));\n                if (subElIndex === 0)\n                    emit('paginationRender', subEl);\n            }\n            else {\n                if (subElIndex === 0)\n                    emit('paginationRender', subEl);\n                emit('paginationUpdate', subEl);\n            }\n            if (swiper.params.watchOverflow && swiper.enabled) {\n                subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n            }\n        });\n    }\n    function render() {\n        // Render Container\n        const params = getParams();\n        if (isPaginationDisabled())\n            return;\n        const slidesLength = getSlidesLength(swiper);\n        const els = makeElementsArray(swiper.pagination.el);\n        let paginationHTML = '';\n        if (params.type === 'bullets') {\n            let numberOfBullets = swiper.params.loop\n                ? Math.ceil(slidesLength / (swiper.params.slidesPerGroup ?? 1))\n                : swiper.snapGrid.length;\n            if (swiper.params.freeMode && isFreeModeEnabled(swiper) && numberOfBullets > slidesLength) {\n                numberOfBullets = slidesLength;\n            }\n            for (let i = 0; i < numberOfBullets; i += 1) {\n                if (params.renderBullet) {\n                    paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n                }\n                else {\n                    // oxfmt-ignore\n                    paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n                }\n            }\n        }\n        if (params.type === 'fraction') {\n            if (params.renderFraction) {\n                paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n            }\n            else {\n                paginationHTML =\n                    `<span class=\"${params.currentClass}\"></span>` +\n                        ' / ' +\n                        `<span class=\"${params.totalClass}\"></span>`;\n            }\n        }\n        if (params.type === 'progressbar') {\n            if (params.renderProgressbar) {\n                paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n            }\n            else {\n                paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n            }\n        }\n        swiper.pagination.bullets = [];\n        els.forEach((subEl) => {\n            if (params.type !== 'custom') {\n                setInnerHTML(subEl, paginationHTML || '');\n            }\n            if (params.type === 'bullets') {\n                swiper.pagination.bullets.push(...Array.from(subEl.querySelectorAll(classesToSelector(params.bulletClass))));\n            }\n        });\n        if (params.type !== 'custom') {\n            emit('paginationRender', els[0]);\n        }\n    }\n    function init() {\n        swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, { el: 'swiper-pagination' });\n        const params = getParams();\n        if (!params.el)\n            return;\n        let el;\n        if (typeof params.el === 'string' && swiper.isElement) {\n            el = swiper.el.querySelector(params.el);\n        }\n        if (!el && typeof params.el === 'string') {\n            el = [...document.querySelectorAll(params.el)];\n        }\n        if (!el) {\n            el = params.el;\n        }\n        if (!el || (Array.isArray(el) && el.length === 0))\n            return;\n        if (swiper.params.uniqueNavElements &&\n            typeof params.el === 'string' &&\n            Array.isArray(el) &&\n            el.length > 1) {\n            el = [...swiper.el.querySelectorAll(params.el)];\n            // check if it belongs to another nested Swiper\n            if (el.length > 1) {\n                const found = el.find((subEl) => {\n                    if (elementParents(subEl, '.swiper')[0] !== swiper.el)\n                        return false;\n                    return true;\n                });\n                if (found)\n                    el = found;\n            }\n        }\n        if (Array.isArray(el) && el.length === 1)\n            el = el[0];\n        Object.assign(swiper.pagination, {\n            el,\n        });\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            if (params.type === 'bullets' && params.clickable) {\n                subEl.classList.add(...(params.clickableClass || '').split(' '));\n            }\n            subEl.classList.add(params.modifierClass + params.type);\n            subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n            if (params.type === 'bullets' && params.dynamicBullets) {\n                subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n                dynamicBulletIndex = 0;\n                if (params.dynamicMainBullets < 1) {\n                    params.dynamicMainBullets = 1;\n                }\n            }\n            if (params.type === 'progressbar' && params.progressbarOpposite) {\n                subEl.classList.add(params.progressbarOppositeClass);\n            }\n            if (params.clickable) {\n                subEl.addEventListener('click', onBulletClick);\n            }\n            if (!swiper.enabled) {\n                subEl.classList.add(params.lockClass);\n            }\n        });\n    }\n    function destroy() {\n        const params = getParams();\n        if (isPaginationDisabled())\n            return;\n        const el = swiper.pagination.el;\n        if (el) {\n            const els = makeElementsArray(el);\n            els.forEach((subEl) => {\n                subEl.classList.remove(params.hiddenClass);\n                subEl.classList.remove(params.modifierClass + params.type);\n                subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n                if (params.clickable) {\n                    subEl.classList.remove(...(params.clickableClass || '').split(' '));\n                    subEl.removeEventListener('click', onBulletClick);\n                }\n            });\n        }\n        if (swiper.pagination.bullets)\n            swiper.pagination.bullets.forEach((subEl) => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n    }\n    on('changeDirection', () => {\n        if (!swiper.pagination || !swiper.pagination.el)\n            return;\n        const params = getParams();\n        const els = makeElementsArray(swiper.pagination.el);\n        els.forEach((subEl) => {\n            subEl.classList.remove(params.horizontalClass, params.verticalClass);\n            subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        });\n    });\n    on('init', () => {\n        if (getParams().enabled === false) {\n            disable();\n        }\n        else {\n            init();\n            render();\n            update();\n        }\n    });\n    on('activeIndexChange', () => {\n        if (typeof swiper.snapIndex === 'undefined') {\n            update();\n        }\n    });\n    on('snapIndexChange', () => {\n        update();\n    });\n    on('snapGridLengthChange', () => {\n        render();\n        update();\n    });\n    on('destroy', () => {\n        destroy();\n    });\n    on('enable disable', () => {\n        const { el } = swiper.pagination;\n        if (el) {\n            const params = getParams();\n            const els = makeElementsArray(el);\n            els.forEach((subEl) => subEl.classList[swiper.enabled ? 'remove' : 'add'](params.lockClass));\n        }\n    });\n    on('lock unlock', () => {\n        update();\n    });\n    on('click', (_s, e) => {\n        const targetEl = e.target;\n        const els = makeElementsArray(swiper.pagination.el);\n        const params = getParams();\n        if (params.el &&\n            params.hideOnClick &&\n            els &&\n            els.length > 0 &&\n            !targetEl.classList.contains(params.bulletClass)) {\n            if (swiper.navigation &&\n                ((swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) ||\n                    (swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)))\n                return;\n            const isHidden = els[0].classList.contains(params.hiddenClass);\n            if (isHidden === true) {\n                emit('paginationShow');\n            }\n            else {\n                emit('paginationHide');\n            }\n            els.forEach((subEl) => subEl.classList.toggle(params.hiddenClass));\n        }\n    });\n    const enable = () => {\n        const params = getParams();\n        swiper.el.classList.remove(params.paginationDisabledClass);\n        const { el } = swiper.pagination;\n        if (el) {\n            const els = makeElementsArray(el);\n            els.forEach((subEl) => subEl.classList.remove(params.paginationDisabledClass));\n        }\n        init();\n        render();\n        update();\n    };\n    const disable = () => {\n        const params = getParams();\n        swiper.el.classList.add(params.paginationDisabledClass);\n        const { el } = swiper.pagination;\n        if (el) {\n            const els = makeElementsArray(el);\n            els.forEach((subEl) => subEl.classList.add(params.paginationDisabledClass));\n        }\n        destroy();\n    };\n    Object.assign(swiper.pagination, {\n        enable,\n        disable,\n        render,\n        update,\n        init,\n        destroy,\n    });\n};\n\nexport { Pagination as default };\n","import { r as isHTMLElement, u as nextTick, m as elementTransitionEnd } from '../shared/utils.mjs';\n\nclass LinearSpline {\n    x;\n    y;\n    lastIndex;\n    binarySearch;\n    constructor(x, y) {\n        let maxIndex;\n        let minIndex;\n        let guess;\n        this.binarySearch = (array, val) => {\n            minIndex = -1;\n            maxIndex = array.length;\n            while (maxIndex - minIndex > 1) {\n                guess = (maxIndex + minIndex) >> 1;\n                if (array[guess] <= val) {\n                    minIndex = guess;\n                }\n                else {\n                    maxIndex = guess;\n                }\n            }\n            return maxIndex;\n        };\n        this.x = x;\n        this.y = y;\n        this.lastIndex = x.length - 1;\n    }\n    interpolate(x2) {\n        if (!x2)\n            return 0;\n        const i3 = this.binarySearch(this.x, x2);\n        const i1 = i3 - 1;\n        // Given an x value (x2), return the expected y2 value:\n        // (x1,y1) is the known point before given value,\n        // (x3,y3) is the known point after given value.\n        // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n        return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]);\n    }\n}\nconst Controller = ({ swiper, extendParams, on }) => {\n    extendParams({\n        controller: {\n            control: undefined,\n            inverse: false,\n            by: 'slide', // or 'container'\n        },\n    });\n    swiper.controller = {\n        control: undefined,\n    };\n    function getParams() {\n        return swiper.params.controller;\n    }\n    function getInterpolateFunction(c) {\n        swiper.controller.spline = swiper.params.loop\n            ? new LinearSpline(swiper.slidesGrid, c.slidesGrid)\n            : new LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n    function setTranslate(_t, byController) {\n        const controlled = swiper.controller.control;\n        let multiplier;\n        let controlledTranslate;\n        const SwiperCtor = swiper.constructor;\n        function setControlledTranslate(c) {\n            if (c.destroyed)\n                return;\n            // this will create an Interpolate function based on the snapGrids\n            // x is the Grid of the scrolled scroller and y will be the controlled scroller\n            // it makes sense to create this only once and recall it for the interpolation\n            // the function does a lot of value caching for performance\n            const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n            const controllerParams = getParams();\n            if (controllerParams.by === 'slide') {\n                getInterpolateFunction(c);\n                // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n                // but it did not work out\n                controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n            }\n            else {\n                controlledTranslate = 0;\n            }\n            if (!controlledTranslate || controllerParams.by === 'container') {\n                multiplier =\n                    (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n                if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {\n                    multiplier = 1;\n                }\n                controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n            }\n            if (controllerParams.inverse) {\n                controlledTranslate = c.maxTranslate() - controlledTranslate;\n            }\n            c.updateProgress(controlledTranslate);\n            c.setTranslate(controlledTranslate, swiper);\n            c.updateActiveIndex();\n            c.updateSlidesClasses();\n        }\n        if (Array.isArray(controlled)) {\n            for (let i = 0; i < controlled.length; i += 1) {\n                const target = controlled[i];\n                if (target && target !== byController && target instanceof SwiperCtor) {\n                    setControlledTranslate(target);\n                }\n            }\n        }\n        else if (controlled instanceof SwiperCtor && byController !== controlled) {\n            setControlledTranslate(controlled);\n        }\n    }\n    function setTransition(duration, byController) {\n        const SwiperCtor = swiper.constructor;\n        const controlled = swiper.controller.control;\n        function setControlledTransition(c) {\n            if (c.destroyed)\n                return;\n            c.setTransition(duration, swiper);\n            if (duration !== 0) {\n                c.transitionStart();\n                if (c.params.autoHeight) {\n                    nextTick(() => {\n                        c.updateAutoHeight();\n                    });\n                }\n                elementTransitionEnd(c.wrapperEl, () => {\n                    if (!controlled)\n                        return;\n                    c.transitionEnd();\n                });\n            }\n        }\n        if (Array.isArray(controlled)) {\n            for (let i = 0; i < controlled.length; i += 1) {\n                const target = controlled[i];\n                if (target && target !== byController && target instanceof SwiperCtor) {\n                    setControlledTransition(target);\n                }\n            }\n        }\n        else if (controlled instanceof SwiperCtor && byController !== controlled) {\n            setControlledTransition(controlled);\n        }\n    }\n    function removeSpline() {\n        if (!swiper.controller.control)\n            return;\n        if (swiper.controller.spline) {\n            swiper.controller.spline = undefined;\n            delete swiper.controller.spline;\n        }\n    }\n    on('beforeInit', () => {\n        const controllerParam = getParams().control;\n        if (typeof window !== 'undefined' &&\n            (typeof controllerParam === 'string' || isHTMLElement(controllerParam))) {\n            const controlElements = typeof controllerParam === 'string'\n                ? [...document.querySelectorAll(controllerParam)]\n                : [controllerParam];\n            controlElements.forEach((controlElement) => {\n                if (!swiper.controller.control)\n                    swiper.controller.control = [];\n                const list = swiper.controller.control;\n                if (controlElement && controlElement.swiper) {\n                    list.push(controlElement.swiper);\n                }\n                else if (controlElement) {\n                    const eventName = `${swiper.params.eventsPrefix}init`;\n                    const onControllerSwiper = (e) => {\n                        const detail = e.detail;\n                        if (detail && detail[0])\n                            list.push(detail[0]);\n                        swiper.update();\n                        controlElement.removeEventListener(eventName, onControllerSwiper);\n                    };\n                    controlElement.addEventListener(eventName, onControllerSwiper);\n                }\n            });\n            return;\n        }\n        // After this point control is either Swiper or Swiper[] (or null/undefined),\n        // never the string/HTMLElement forms that the public option accepts.\n        swiper.controller.control = controllerParam;\n    });\n    on('update', () => {\n        removeSpline();\n    });\n    on('resize', () => {\n        removeSpline();\n    });\n    on('observerUpdate', () => {\n        removeSpline();\n    });\n    // Event payloads come typed against the legacy public Swiper class\n    // (src/types/swiper-class.d.ts) until Phase 5 deletes src/types/; cast the\n    // forwarded byController back to the core Swiper so it lines up with the\n    // controller-internal signatures.\n    on('setTranslate', (_s, translate, byController) => {\n        if (!swiper.controller.control)\n            return;\n        if (!Array.isArray(swiper.controller.control) && swiper.controller.control.destroyed)\n            return;\n        swiper.controller.setTranslate(translate, byController);\n    });\n    on('setTransition', (_s, duration, byController) => {\n        if (!swiper.controller.control)\n            return;\n        if (!Array.isArray(swiper.controller.control) && swiper.controller.control.destroyed)\n            return;\n        swiper.controller.setTransition(duration, byController);\n    });\n    Object.assign(swiper.controller, {\n        setTranslate,\n        setTransition,\n    });\n};\n\nexport { Controller as default };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { a as createElement, t as makeElementsArray, b as elementIndex, x as setInnerHTML } from '../shared/utils.mjs';\n\nconst isVirtualEnabled = (swiper) => !!swiper.virtual && !!swiper.params.virtual?.enabled;\nconst A11y = ({ swiper, extendParams, on }) => {\n    extendParams({\n        a11y: {\n            enabled: true,\n            notificationClass: 'swiper-notification',\n            prevSlideMessage: 'Previous slide',\n            nextSlideMessage: 'Next slide',\n            firstSlideMessage: 'This is the first slide',\n            lastSlideMessage: 'This is the last slide',\n            paginationBulletMessage: 'Go to slide {{index}}',\n            slideLabelMessage: '{{index}} / {{slidesLength}}',\n            containerMessage: null,\n            containerRoleDescriptionMessage: null,\n            containerRole: null,\n            itemRoleDescriptionMessage: null,\n            slideRole: 'group',\n            id: null,\n            scrollOnFocus: true,\n            wrapperLiveRegion: true,\n        },\n    });\n    swiper.a11y = {\n        clicked: false,\n    };\n    let liveRegion = null;\n    let preventFocusHandler = false;\n    let focusTargetSlideEl;\n    let visibilityChangedTimestamp = new Date().getTime();\n    function getParams() {\n        return swiper.params.a11y;\n    }\n    function notify(message) {\n        const notification = liveRegion;\n        if (!notification || !message)\n            return;\n        setInnerHTML(notification, message);\n    }\n    function getRandomNumber(size = 16) {\n        const randomChar = () => Math.round(16 * Math.random()).toString(16);\n        return 'x'.repeat(size).replace(/x/g, randomChar);\n    }\n    function makeElFocusable(el) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('tabIndex', '0');\n        });\n    }\n    function makeElNotFocusable(el) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('tabIndex', '-1');\n        });\n    }\n    function addElRole(el, role) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('role', role);\n        });\n    }\n    function addElRoleDescription(el, description) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('aria-roledescription', description);\n        });\n    }\n    function addElLabel(el, label) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('aria-label', label);\n        });\n    }\n    function addElId(el, id) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('id', id);\n        });\n    }\n    function addElLive(el, live) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('aria-live', live);\n        });\n    }\n    function disableEl(el) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.setAttribute('aria-disabled', 'true');\n        });\n    }\n    function enableEl(el) {\n        const els = makeElementsArray(el);\n        els.forEach((subEl) => {\n            subEl.removeAttribute('aria-disabled');\n        });\n    }\n    function onEnterOrSpaceKey(e) {\n        if (e.keyCode !== 13 && e.keyCode !== 32)\n            return;\n        const params = getParams();\n        const paginationParams = swiper.params.pagination;\n        const targetEl = e.target;\n        if (swiper.pagination &&\n            swiper.pagination.el &&\n            (targetEl === swiper.pagination.el || swiper.pagination.el.contains(targetEl))) {\n            if (!targetEl.matches(classesToSelector(paginationParams?.bulletClass)))\n                return;\n        }\n        if (swiper.navigation && swiper.navigation.prevEl && swiper.navigation.nextEl) {\n            const prevEls = makeElementsArray(swiper.navigation.prevEl);\n            const nextEls = makeElementsArray(swiper.navigation.nextEl);\n            if (nextEls.includes(targetEl)) {\n                if (!(swiper.isEnd && !swiper.params.loop)) {\n                    swiper.slideNext();\n                }\n                if (swiper.isEnd) {\n                    notify(params.lastSlideMessage);\n                }\n                else {\n                    notify(params.nextSlideMessage);\n                }\n            }\n            if (prevEls.includes(targetEl)) {\n                if (!(swiper.isBeginning && !swiper.params.loop)) {\n                    swiper.slidePrev();\n                }\n                if (swiper.isBeginning) {\n                    notify(params.firstSlideMessage);\n                }\n                else {\n                    notify(params.prevSlideMessage);\n                }\n            }\n        }\n        if (swiper.pagination && targetEl.matches(classesToSelector(paginationParams?.bulletClass))) {\n            targetEl.click();\n        }\n    }\n    function updateNavigation() {\n        if (swiper.params.loop || swiper.params.rewind || !swiper.navigation)\n            return;\n        const { nextEl, prevEl } = swiper.navigation;\n        if (prevEl) {\n            if (swiper.isBeginning) {\n                disableEl(prevEl);\n                makeElNotFocusable(prevEl);\n            }\n            else {\n                enableEl(prevEl);\n                makeElFocusable(prevEl);\n            }\n        }\n        if (nextEl) {\n            if (swiper.isEnd) {\n                disableEl(nextEl);\n                makeElNotFocusable(nextEl);\n            }\n            else {\n                enableEl(nextEl);\n                makeElFocusable(nextEl);\n            }\n        }\n    }\n    function hasPagination() {\n        return !!(swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length);\n    }\n    function hasClickablePagination() {\n        const paginationParams = swiper.params.pagination;\n        return hasPagination() && !!paginationParams?.clickable;\n    }\n    function updatePagination() {\n        const params = getParams();\n        if (!hasPagination())\n            return;\n        const paginationParams = swiper.params.pagination;\n        swiper.pagination.bullets.forEach((bulletEl) => {\n            if (paginationParams.clickable) {\n                makeElFocusable(bulletEl);\n                if (!paginationParams.renderBullet) {\n                    addElRole(bulletEl, 'button');\n                    addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, String((elementIndex(bulletEl) ?? 0) + 1)));\n                }\n            }\n            if (bulletEl.matches(classesToSelector(paginationParams.bulletActiveClass))) {\n                bulletEl.setAttribute('aria-current', 'true');\n            }\n            else {\n                bulletEl.removeAttribute('aria-current');\n            }\n        });\n    }\n    const initNavEl = (el, _wrapperId, message) => {\n        makeElFocusable(el);\n        if (el.tagName !== 'BUTTON') {\n            addElRole(el, 'button');\n            el.addEventListener('keydown', onEnterOrSpaceKey);\n        }\n        addElLabel(el, message);\n    };\n    const handlePointerDown = (e) => {\n        if (focusTargetSlideEl &&\n            focusTargetSlideEl !== e.target &&\n            !focusTargetSlideEl.contains(e.target)) {\n            preventFocusHandler = true;\n        }\n        swiper.a11y.clicked = true;\n    };\n    const handlePointerUp = () => {\n        preventFocusHandler = false;\n        requestAnimationFrame(() => {\n            requestAnimationFrame(() => {\n                if (!swiper.destroyed) {\n                    swiper.a11y.clicked = false;\n                }\n            });\n        });\n    };\n    const onVisibilityChange = (_e) => {\n        visibilityChangedTimestamp = new Date().getTime();\n    };\n    // Loop keyboard trap (#8181): on Tab out of the last/first real slide, make other slides `inert` for the keypress so focus leaves the wrapper\n    let inertSlides = [];\n    const releaseInertSlides = () => {\n        inertSlides.forEach((slideEl) => slideEl.removeAttribute('inert'));\n        inertSlides = [];\n    };\n    const handleTabKey = (e) => {\n        if (e.key !== 'Tab' || !swiper.params.loop || swiper.destroyed)\n            return;\n        const target = e.target;\n        const slideEl = target?.closest?.(`.${swiper.params.slideClass}, swiper-slide`);\n        if (!slideEl || !swiper.slides.includes(slideEl))\n            return;\n        const realIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index') || '', 10);\n        if (Number.isNaN(realIndex))\n            return;\n        const slidesLength = isVirtualEnabled(swiper)\n            ? swiper.virtual.slides.length\n            : swiper.slides.length;\n        const isEdge = e.shiftKey ? realIndex === 0 : realIndex === slidesLength - 1;\n        if (!isEdge)\n            return;\n        releaseInertSlides();\n        swiper.slides.forEach((el) => {\n            if (el === slideEl || el.hasAttribute('inert'))\n                return;\n            el.setAttribute('inert', '');\n            inertSlides.push(el);\n        });\n        setTimeout(releaseInertSlides, 0);\n    };\n    const handleFocus = (e) => {\n        const params = getParams();\n        if (swiper.a11y.clicked || !params.scrollOnFocus)\n            return;\n        if (new Date().getTime() - visibilityChangedTimestamp < 100)\n            return;\n        const target = e.target;\n        const slideEl = target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n        if (!slideEl || !swiper.slides.includes(slideEl))\n            return;\n        focusTargetSlideEl = slideEl;\n        const isVirtual = isVirtualEnabled(swiper);\n        const isActive = (isVirtual\n            ? parseInt(slideEl.getAttribute('data-swiper-slide-index') || '0', 10)\n            : swiper.slides.indexOf(slideEl)) === swiper.activeIndex;\n        const isVisible = swiper.params.watchSlidesProgress &&\n            swiper.visibleSlides &&\n            swiper.visibleSlides.includes(slideEl);\n        if (isActive || isVisible)\n            return;\n        const sourceCapabilities = e.sourceCapabilities;\n        if (sourceCapabilities && sourceCapabilities.firesTouchEvents)\n            return;\n        if (swiper.isHorizontal()) {\n            swiper.el.scrollLeft = 0;\n        }\n        else {\n            swiper.el.scrollTop = 0;\n        }\n        requestAnimationFrame(() => {\n            if (preventFocusHandler)\n                return;\n            if (swiper.params.loop) {\n                swiper.slideToLoop(swiper.getSlideIndexWhenGrid(parseInt(slideEl.getAttribute('data-swiper-slide-index') || '0', 10)), 0);\n            }\n            else if (isVirtual) {\n                swiper.slideTo(swiper.getSlideIndexWhenGrid(parseInt(slideEl.getAttribute('data-swiper-slide-index') || '0', 10)), 0);\n            }\n            else {\n                swiper.slideTo(swiper.getSlideIndexWhenGrid(swiper.slides.indexOf(slideEl)), 0);\n            }\n            preventFocusHandler = false;\n        });\n    };\n    const initSlides = () => {\n        const params = getParams();\n        if (params.itemRoleDescriptionMessage) {\n            addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n        }\n        if (params.slideRole) {\n            addElRole(swiper.slides, params.slideRole);\n        }\n        const slidesLength = swiper.slides.length;\n        const slideLabelMessage = params.slideLabelMessage;\n        if (slideLabelMessage) {\n            swiper.slides.forEach((slideEl, index) => {\n                const slideIndex = swiper.params.loop\n                    ? parseInt(slideEl.getAttribute('data-swiper-slide-index') || '0', 10)\n                    : index;\n                const ariaLabelMessage = slideLabelMessage\n                    .replace(/\\{\\{index\\}\\}/, String(slideIndex + 1))\n                    .replace(/\\{\\{slidesLength\\}\\}/, String(slidesLength));\n                addElLabel(slideEl, ariaLabelMessage);\n            });\n        }\n    };\n    const init = () => {\n        const params = getParams();\n        if (liveRegion)\n            swiper.el.append(liveRegion);\n        // Container\n        const containerEl = swiper.el;\n        if (params.containerRoleDescriptionMessage) {\n            addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n        }\n        if (params.containerMessage) {\n            addElLabel(containerEl, params.containerMessage);\n        }\n        if (params.containerRole) {\n            addElRole(containerEl, params.containerRole);\n        }\n        // Wrapper\n        const wrapperEl = swiper.wrapperEl;\n        const wrapperId = String(params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`);\n        addElId(wrapperEl, wrapperId);\n        if (params.wrapperLiveRegion) {\n            const autoplayParams = swiper.params.autoplay;\n            const live = swiper.params.autoplay && autoplayParams?.enabled ? 'off' : 'polite';\n            addElLive(wrapperEl, live);\n        }\n        // Slide\n        initSlides();\n        // Navigation\n        const nav = swiper.navigation\n            ? swiper.navigation\n            : { nextEl: undefined, prevEl: undefined };\n        const nextEls = makeElementsArray(nav.nextEl);\n        const prevEls = makeElementsArray(nav.prevEl);\n        if (nextEls) {\n            nextEls.forEach((el) => initNavEl(el, wrapperId, params.nextSlideMessage));\n        }\n        if (prevEls) {\n            prevEls.forEach((el) => initNavEl(el, wrapperId, params.prevSlideMessage));\n        }\n        // Pagination\n        if (hasClickablePagination()) {\n            const paginationEl = makeElementsArray(swiper.pagination.el);\n            paginationEl.forEach((el) => {\n                el.addEventListener('keydown', onEnterOrSpaceKey);\n            });\n        }\n        // Tab focus\n        document.addEventListener('visibilitychange', onVisibilityChange);\n        swiper.el.addEventListener('focus', handleFocus, true);\n        swiper.el.addEventListener('keydown', handleTabKey, true);\n        swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n        swiper.el.addEventListener('pointerup', handlePointerUp, true);\n    };\n    function destroy() {\n        if (liveRegion)\n            liveRegion.remove();\n        const nav = swiper.navigation\n            ? swiper.navigation\n            : { nextEl: undefined, prevEl: undefined };\n        const nextEls = makeElementsArray(nav.nextEl);\n        const prevEls = makeElementsArray(nav.prevEl);\n        if (nextEls) {\n            nextEls.forEach((el) => el.removeEventListener('keydown', onEnterOrSpaceKey));\n        }\n        if (prevEls) {\n            prevEls.forEach((el) => el.removeEventListener('keydown', onEnterOrSpaceKey));\n        }\n        // Pagination\n        if (hasClickablePagination()) {\n            const paginationEl = makeElementsArray(swiper.pagination.el);\n            paginationEl.forEach((el) => {\n                el.removeEventListener('keydown', onEnterOrSpaceKey);\n            });\n        }\n        document.removeEventListener('visibilitychange', onVisibilityChange);\n        // Tab focus\n        if (swiper.el && typeof swiper.el !== 'string') {\n            swiper.el.removeEventListener('focus', handleFocus, true);\n            swiper.el.removeEventListener('keydown', handleTabKey, true);\n            swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n            swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n        }\n        releaseInertSlides();\n    }\n    on('beforeInit', () => {\n        liveRegion = createElement('span', getParams().notificationClass);\n        liveRegion.setAttribute('aria-live', 'assertive');\n        liveRegion.setAttribute('aria-atomic', 'true');\n    });\n    on('afterInit', () => {\n        if (!getParams().enabled)\n            return;\n        init();\n    });\n    on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n        if (!getParams().enabled)\n            return;\n        initSlides();\n    });\n    on('fromEdge toEdge afterInit lock unlock', () => {\n        if (!getParams().enabled)\n            return;\n        updateNavigation();\n    });\n    on('paginationUpdate', () => {\n        if (!getParams().enabled)\n            return;\n        updatePagination();\n    });\n    on('destroy', () => {\n        if (!getParams().enabled)\n            return;\n        destroy();\n    });\n};\n\nexport { A11y as default };\n","import { e as elementChildren } from '../shared/utils.mjs';\n\nconst isVirtualEnabled = (swiper) => !!swiper.virtual && !!swiper.params.virtual?.enabled;\nconst HashNavigation = ({ swiper, extendParams, emit, on }) => {\n    let initialized = false;\n    extendParams({\n        hashNavigation: {\n            enabled: false,\n            replaceState: false,\n            watchState: false,\n            getSlideIndex(_s, hash) {\n                if (isVirtualEnabled(swiper)) {\n                    const slideWithHash = swiper.slides.find((slideEl) => slideEl.getAttribute('data-hash') === hash);\n                    if (!slideWithHash)\n                        return 0;\n                    const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index') || '0', 10);\n                    return index;\n                }\n                const matched = elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${hash}\"], swiper-slide[data-hash=\"${hash}\"]`)[0];\n                return matched ? swiper.getSlideIndex(matched) : 0;\n            },\n        },\n    });\n    function getParams() {\n        return swiper.params.hashNavigation;\n    }\n    const onHashChange = () => {\n        emit('hashChange');\n        const newHash = document.location.hash.replace('#', '');\n        const activeSlideEl = isVirtualEnabled(swiper)\n            ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`)\n            : swiper.slides[swiper.activeIndex];\n        const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';\n        if (newHash !== activeSlideHash) {\n            const newIndex = getParams().getSlideIndex(swiper, newHash);\n            if (typeof newIndex === 'undefined' || Number.isNaN(newIndex))\n                return;\n            swiper.slideTo(newIndex);\n        }\n    };\n    const setHash = () => {\n        const params = getParams();\n        if (!initialized || !params.enabled)\n            return;\n        const activeSlideEl = isVirtualEnabled(swiper)\n            ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`)\n            : swiper.slides[swiper.activeIndex];\n        const activeSlideHash = activeSlideEl\n            ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history')\n            : '';\n        if (params.replaceState && window.history && window.history.replaceState) {\n            window.history.replaceState(null, '', `#${activeSlideHash}` || '');\n            emit('hashSet');\n        }\n        else {\n            document.location.hash = activeSlideHash || '';\n            emit('hashSet');\n        }\n    };\n    const init = () => {\n        const params = getParams();\n        const historyParams = swiper.params.history;\n        if (!params.enabled || (historyParams && historyParams.enabled))\n            return;\n        initialized = true;\n        const hash = document.location.hash.replace('#', '');\n        if (hash) {\n            const speed = 0;\n            const index = params.getSlideIndex(swiper, hash);\n            swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);\n        }\n        if (params.watchState) {\n            window.addEventListener('hashchange', onHashChange);\n        }\n    };\n    const destroy = () => {\n        if (getParams().watchState) {\n            window.removeEventListener('hashchange', onHashChange);\n        }\n    };\n    on('init', () => {\n        if (getParams().enabled) {\n            init();\n        }\n    });\n    on('destroy', () => {\n        if (getParams().enabled) {\n            destroy();\n        }\n    });\n    on('transitionEnd _freeModeNoMomentumRelease', () => {\n        if (initialized) {\n            setHash();\n        }\n    });\n    on('slideChange', () => {\n        if (initialized && swiper.params.cssMode) {\n            setHash();\n        }\n    });\n};\n\nexport { HashNavigation as default };\n","import { x as setInnerHTML } from '../shared/utils.mjs';\n\nfunction addSlide(index, slides) {\n    const swiper = this;\n    const { params, activeIndex, slidesEl } = swiper;\n    let activeIndexBuffer = activeIndex;\n    if (params.loop) {\n        activeIndexBuffer -= swiper.loopedSlides ?? 0;\n        swiper.loopDestroy();\n        swiper.recalcSlides();\n    }\n    const baseLength = swiper.slides.length;\n    if (index <= 0) {\n        swiper.prependSlide(slides);\n        return;\n    }\n    if (index >= baseLength) {\n        swiper.appendSlide(slides);\n        return;\n    }\n    let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n    const slidesBuffer = [];\n    for (let i = baseLength - 1; i >= index; i -= 1) {\n        const currentSlide = swiper.slides[i];\n        if (!currentSlide)\n            continue;\n        currentSlide.remove();\n        slidesBuffer.unshift(currentSlide);\n    }\n    if (Array.isArray(slides)) {\n        for (let i = 0; i < slides.length; i += 1) {\n            const slide = slides[i];\n            if (slide)\n                slidesEl.append(slide);\n        }\n        newActiveIndex =\n            activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n    }\n    else {\n        slidesEl.append(slides);\n    }\n    for (let i = 0; i < slidesBuffer.length; i += 1) {\n        slidesEl.append(slidesBuffer[i]);\n    }\n    swiper.recalcSlides();\n    if (params.loop) {\n        swiper.loopCreate();\n    }\n    if (!params.observer || swiper.isElement) {\n        swiper.update();\n    }\n    if (params.loop) {\n        swiper.slideTo(newActiveIndex + (swiper.loopedSlides ?? 0), 0, false);\n    }\n    else {\n        swiper.slideTo(newActiveIndex, 0, false);\n    }\n}\n\nfunction appendSlide(slides) {\n    const swiper = this;\n    const { params, slidesEl } = swiper;\n    if (params.loop) {\n        swiper.loopDestroy();\n    }\n    const appendElement = (slideEl) => {\n        if (typeof slideEl === 'string') {\n            const tempDOM = document.createElement('div');\n            setInnerHTML(tempDOM, slideEl);\n            const child = tempDOM.children[0];\n            if (child)\n                slidesEl.append(child);\n            setInnerHTML(tempDOM, '');\n        }\n        else {\n            slidesEl.append(slideEl);\n        }\n    };\n    if (Array.isArray(slides)) {\n        for (let i = 0; i < slides.length; i += 1) {\n            const slide = slides[i];\n            if (slide)\n                appendElement(slide);\n        }\n    }\n    else {\n        appendElement(slides);\n    }\n    swiper.recalcSlides();\n    if (params.loop) {\n        swiper.loopCreate();\n    }\n    if (!params.observer || swiper.isElement) {\n        swiper.update();\n    }\n}\n\nfunction prependSlide(slides) {\n    const swiper = this;\n    const { params, activeIndex, slidesEl } = swiper;\n    if (params.loop) {\n        swiper.loopDestroy();\n    }\n    let newActiveIndex = activeIndex + 1;\n    const prependElement = (slideEl) => {\n        if (typeof slideEl === 'string') {\n            const tempDOM = document.createElement('div');\n            setInnerHTML(tempDOM, slideEl);\n            const child = tempDOM.children[0];\n            if (child)\n                slidesEl.prepend(child);\n            setInnerHTML(tempDOM, '');\n        }\n        else {\n            slidesEl.prepend(slideEl);\n        }\n    };\n    if (Array.isArray(slides)) {\n        for (let i = 0; i < slides.length; i += 1) {\n            const slide = slides[i];\n            if (slide)\n                prependElement(slide);\n        }\n        newActiveIndex = activeIndex + slides.length;\n    }\n    else {\n        prependElement(slides);\n    }\n    swiper.recalcSlides();\n    if (params.loop) {\n        swiper.loopCreate();\n    }\n    if (!params.observer || swiper.isElement) {\n        swiper.update();\n    }\n    swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction removeAllSlides() {\n    const swiper = this;\n    const slidesIndexes = [];\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n        slidesIndexes.push(i);\n    }\n    swiper.removeSlide(slidesIndexes);\n}\n\nfunction removeSlide(slidesIndexes) {\n    const swiper = this;\n    const { params, activeIndex } = swiper;\n    let activeIndexBuffer = activeIndex;\n    if (params.loop) {\n        activeIndexBuffer -= swiper.loopedSlides ?? 0;\n        swiper.loopDestroy();\n    }\n    let newActiveIndex = activeIndexBuffer;\n    if (Array.isArray(slidesIndexes)) {\n        for (let i = 0; i < slidesIndexes.length; i += 1) {\n            const indexToRemove = slidesIndexes[i];\n            if (swiper.slides[indexToRemove])\n                swiper.slides[indexToRemove].remove();\n            if (indexToRemove < newActiveIndex)\n                newActiveIndex -= 1;\n        }\n        newActiveIndex = Math.max(newActiveIndex, 0);\n    }\n    else {\n        const indexToRemove = slidesIndexes;\n        if (swiper.slides[indexToRemove])\n            swiper.slides[indexToRemove].remove();\n        if (indexToRemove < newActiveIndex)\n            newActiveIndex -= 1;\n        newActiveIndex = Math.max(newActiveIndex, 0);\n    }\n    swiper.recalcSlides();\n    if (params.loop) {\n        swiper.loopCreate();\n    }\n    if (!params.observer || swiper.isElement) {\n        swiper.update();\n    }\n    if (params.loop) {\n        swiper.slideTo(newActiveIndex + (swiper.loopedSlides ?? 0), 0, false);\n    }\n    else {\n        swiper.slideTo(newActiveIndex, 0, false);\n    }\n}\n\nconst Manipulation = ({ swiper }) => {\n    Object.assign(swiper, {\n        appendSlide: appendSlide.bind(swiper),\n        prependSlide: prependSlide.bind(swiper),\n        addSlide: addSlide.bind(swiper),\n        removeSlide: removeSlide.bind(swiper),\n        removeAllSlides: removeAllSlides.bind(swiper),\n    });\n};\n\nexport { Manipulation as default };\n","function effectInit(params) {\n    const { effect, swiper, on, setTranslate, setTransition, overwriteParams, perspective, recreateShadows, getEffectParams, } = params;\n    on('beforeInit', () => {\n        if (swiper.params.effect !== effect)\n            return;\n        swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n        if (perspective && perspective()) {\n            swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n        }\n        const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n        Object.assign(swiper.params, overwriteParamsResult);\n        Object.assign(swiper.originalParams, overwriteParamsResult);\n    });\n    on('setTranslate _virtualUpdated', () => {\n        if (swiper.params.effect !== effect)\n            return;\n        setTranslate();\n    });\n    on('setTransition', (_s, duration) => {\n        if (swiper.params.effect !== effect)\n            return;\n        setTransition(duration);\n    });\n    on('transitionEnd', () => {\n        if (swiper.params.effect !== effect)\n            return;\n        if (recreateShadows) {\n            const effectParams = getEffectParams ? getEffectParams() : undefined;\n            if (!effectParams || !effectParams.slideShadows)\n                return;\n            swiper.slides.forEach((slideEl) => {\n                slideEl\n                    .querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n                    .forEach((shadowEl) => shadowEl.remove());\n            });\n            recreateShadows();\n        }\n    });\n    let requireUpdateOnVirtual = false;\n    on('virtualUpdate', () => {\n        if (swiper.params.effect !== effect)\n            return;\n        if (!swiper.slides.length) {\n            requireUpdateOnVirtual = true;\n        }\n        requestAnimationFrame(() => {\n            if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n                setTranslate();\n                requireUpdateOnVirtual = false;\n            }\n        });\n    });\n}\n\nexport { effectInit as e };\n","import { p as getSlideTransformEl } from './utils.mjs';\n\nfunction effectTarget(_effectParams, slideEl) {\n    const transformEl = getSlideTransformEl(slideEl);\n    if (transformEl !== slideEl) {\n        transformEl.style.backfaceVisibility = 'hidden';\n        transformEl.style.setProperty('-webkit-backface-visibility', 'hidden');\n    }\n    return transformEl;\n}\n\nexport { effectTarget as e };\n","import { m as elementTransitionEnd, r as isHTMLElement } from './utils.mjs';\n\nfunction effectVirtualTransitionEnd({ swiper, duration, transformElements, allSlides, }) {\n    const { activeIndex } = swiper;\n    const getSlide = (el) => {\n        if (!el.parentElement) {\n            // assume shadow root\n            return swiper.slides.find((slideEl) => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode);\n        }\n        if (isHTMLElement(el.parentElement))\n            return el.parentElement;\n        return undefined;\n    };\n    if (swiper.params.virtualTranslate && duration !== 0) {\n        let eventTriggered = false;\n        let transitionEndTarget;\n        if (allSlides) {\n            transitionEndTarget = transformElements;\n        }\n        else {\n            transitionEndTarget = transformElements.filter((transformEl) => {\n                const el = transformEl.classList.contains('swiper-slide-transform')\n                    ? getSlide(transformEl)\n                    : transformEl;\n                return !!el && swiper.getSlideIndex(el) === activeIndex;\n            });\n        }\n        transitionEndTarget.forEach((el) => {\n            elementTransitionEnd(el, () => {\n                if (eventTriggered)\n                    return;\n                if (!swiper || swiper.destroyed)\n                    return;\n                eventTriggered = true;\n                swiper.animating = false;\n                const evt = new CustomEvent('transitionend', { bubbles: true, cancelable: true });\n                swiper.wrapperEl.dispatchEvent(evt);\n            });\n        });\n    }\n}\n\nexport { effectVirtualTransitionEnd as e };\n","import { p as getSlideTransformEl, a as createElement } from './utils.mjs';\n\nfunction createShadow(suffix, slideEl, side) {\n    const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;\n    const shadowContainer = getSlideTransformEl(slideEl);\n    const selector = `.${shadowClass.split(' ').join('.')}`;\n    const existing = shadowContainer.querySelector(selector);\n    if (existing)\n        return existing;\n    const created = createElement('div', shadowClass.split(' '));\n    shadowContainer.append(created);\n    return created;\n}\n\nexport { createShadow as c };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { p as getSlideTransformEl, o as getRotateFix } from '../shared/utils.mjs';\n\nconst EffectFlip = ({ swiper, extendParams, on }) => {\n    extendParams({\n        flipEffect: {\n            slideShadows: true,\n            limitRotation: true,\n        },\n    });\n    function getParams() {\n        return swiper.params.flipEffect;\n    }\n    const createSlideShadows = (slideEl, progress) => {\n        let shadowBefore = swiper.isHorizontal()\n            ? slideEl.querySelector('.swiper-slide-shadow-left')\n            : slideEl.querySelector('.swiper-slide-shadow-top');\n        let shadowAfter = swiper.isHorizontal()\n            ? slideEl.querySelector('.swiper-slide-shadow-right')\n            : slideEl.querySelector('.swiper-slide-shadow-bottom');\n        if (!shadowBefore) {\n            shadowBefore = createShadow('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');\n        }\n        if (!shadowAfter) {\n            shadowAfter = createShadow('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n        }\n        if (shadowBefore)\n            shadowBefore.style.opacity = String(Math.max(-progress, 0));\n        if (shadowAfter)\n            shadowAfter.style.opacity = String(Math.max(progress, 0));\n    };\n    const recreateShadows = () => {\n        // Set shadows\n        const params = getParams();\n        swiper.slides.forEach((slideEl) => {\n            let progress = slideEl.progress ?? 0;\n            if (params.limitRotation) {\n                progress = Math.max(Math.min(progress, 1), -1);\n            }\n            createSlideShadows(slideEl, progress);\n        });\n    };\n    const setTranslate = () => {\n        const { slides, rtlTranslate: rtl } = swiper;\n        const params = getParams();\n        const rotateFix = getRotateFix(swiper);\n        for (let i = 0; i < slides.length; i += 1) {\n            const slideEl = slides[i];\n            let progress = slideEl.progress ?? 0;\n            if (params.limitRotation) {\n                progress = Math.max(Math.min(progress, 1), -1);\n            }\n            const offset = slideEl.swiperSlideOffset ?? 0;\n            const rotate = -180 * progress;\n            let rotateY = rotate;\n            let rotateX = 0;\n            let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n            let ty = 0;\n            if (!swiper.isHorizontal()) {\n                ty = tx;\n                tx = 0;\n                rotateX = -rotateY;\n                rotateY = 0;\n            }\n            else if (rtl) {\n                rotateY = -rotateY;\n            }\n            slideEl.style.zIndex = String(-Math.abs(Math.round(progress)) + slides.length);\n            if (params.slideShadows) {\n                createSlideShadows(slideEl, progress);\n            }\n            const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateFix(rotateX)}deg) rotateY(${rotateFix(rotateY)}deg)`;\n            const targetEl = effectTarget(params, slideEl);\n            targetEl.style.transform = transform;\n        }\n    };\n    const setTransition = (duration) => {\n        const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));\n        transformElements.forEach((el) => {\n            el.style.transitionDuration = `${duration}ms`;\n            el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach((shadowEl) => {\n                shadowEl.style.transitionDuration = `${duration}ms`;\n            });\n        });\n        effectVirtualTransitionEnd({ swiper, duration, transformElements });\n    };\n    effectInit({\n        effect: 'flip',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        recreateShadows,\n        getEffectParams: () => swiper.params.flipEffect,\n        perspective: () => true,\n        overwriteParams: () => ({\n            slidesPerView: 1,\n            slidesPerGroup: 1,\n            watchSlidesProgress: true,\n            spaceBetween: 0,\n            virtualTranslate: !swiper.params.cssMode,\n        }),\n    });\n};\n\nexport { EffectFlip as default };\n","/**\n * Swiper 14.4.0\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2026 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: October 30, 2026\n */\n\nimport { S as Swiper } from './shared/swiper-core.mjs';\nimport Virtual from './modules/virtual.mjs';\nimport Keyboard from './modules/keyboard.mjs';\nimport Mousewheel from './modules/mousewheel.mjs';\nimport Navigation from './modules/navigation.mjs';\nimport Pagination from './modules/pagination.mjs';\nimport Scrollbar from './modules/scrollbar.mjs';\nimport Parallax from './modules/parallax.mjs';\nimport Zoom from './modules/zoom.mjs';\nimport Controller from './modules/controller.mjs';\nimport A11y from './modules/a11y.mjs';\nimport History from './modules/history.mjs';\nimport HashNavigation from './modules/hash-navigation.mjs';\nimport Autoplay from './modules/autoplay.mjs';\nimport Thumb from './modules/thumbs.mjs';\nimport FreeMode from './modules/free-mode.mjs';\nimport Grid from './modules/grid.mjs';\nimport Manipulation from './modules/manipulation.mjs';\nimport EffectFade from './modules/effect-fade.mjs';\nimport EffectCube from './modules/effect-cube.mjs';\nimport EffectFlip from './modules/effect-flip.mjs';\nimport EffectCoverflow from './modules/effect-coverflow.mjs';\nimport EffectCreative from './modules/effect-creative.mjs';\nimport EffectCards from './modules/effect-cards.mjs';\n\n// Swiper Class\nconst modules = [\nVirtual,\n  Keyboard,\n  Mousewheel,\n  Navigation,\n  Pagination,\n  Scrollbar,\n  Parallax,\n  Zoom,\n  Controller,\n  A11y,\n  History,\n  HashNavigation,\n  Autoplay,\n  Thumb,\n  FreeMode,\n  Grid,\n  Manipulation,\n  EffectFade,\n  EffectCube,\n  EffectFlip,\n  EffectCoverflow,\n  EffectCreative,\n  EffectCards\n];\nSwiper.use(modules);\n\nexport { Swiper, Swiper as default };\n","import { w as setCSSProperty, e as elementChildren, x as setInnerHTML, a as createElement } from '../shared/utils.mjs';\n\nconst Virtual = ({ swiper, extendParams, on, emit }) => {\n    extendParams({\n        virtual: {\n            enabled: false,\n            slides: [],\n            cache: true,\n            slidesPerViewAutoSlideSize: 320,\n            renderSlide: null,\n            renderExternal: null,\n            renderExternalUpdate: true,\n            addSlidesBefore: 0,\n            addSlidesAfter: 0,\n        },\n    });\n    let cssModeTimeout;\n    // Methods (appendSlide/prependSlide/removeSlide/removeAllSlides/update) are\n    // attached via Object.assign below once they're defined. Cast through\n    // Partial<> so the initial state-only literal can be assigned without\n    // pretending the methods exist yet.\n    swiper.virtual = {\n        cache: {},\n        from: 0,\n        // -1 marks \"nothing rendered yet\": no real update can produce to < from,\n        // so the first update() never mistakes slide 0 for an already-rendered\n        // slide and always appends the full [from, to] window (#8202).\n        to: -1,\n        slides: [],\n        offset: 0,\n        slidesGrid: [],\n    };\n    function getParams() {\n        return swiper.params.virtual;\n    }\n    // Created lazily so module init does not touch the DOM (SSR / Node safe).\n    let tempDOM;\n    const getTempDOM = () => (tempDOM ??= document.createElement('div'));\n    function renderSlide(slide, index) {\n        const params = getParams();\n        if (params.cache && swiper.virtual.cache[index]) {\n            return swiper.virtual.cache[index];\n        }\n        let slideEl;\n        if (params.renderSlide) {\n            const rendered = params.renderSlide.call(swiper, slide, index);\n            if (typeof rendered === 'string') {\n                const el = getTempDOM();\n                setInnerHTML(el, rendered);\n                slideEl = el.children[0];\n            }\n            else {\n                slideEl = rendered;\n            }\n        }\n        else if (swiper.isElement) {\n            slideEl = createElement('swiper-slide');\n        }\n        else {\n            slideEl = createElement('div', swiper.params.slideClass);\n        }\n        slideEl.setAttribute('data-swiper-slide-index', String(index));\n        if (!params.renderSlide) {\n            setInnerHTML(slideEl, slide);\n        }\n        if (params.cache) {\n            swiper.virtual.cache[index] = slideEl;\n        }\n        return slideEl;\n    }\n    function update(force, beforeInit, forceActiveIndex) {\n        const { slidesPerGroup, centeredSlides, slidesPerView, loop: isLoop, initialSlide, } = swiper.params;\n        if (beforeInit && !isLoop && (initialSlide ?? 0) > 0) {\n            return;\n        }\n        const { addSlidesBefore, addSlidesAfter, slidesPerViewAutoSlideSize } = getParams();\n        const { from: previousFrom, to: previousTo, slides, slidesGrid: previousSlidesGrid, offset: previousOffset, } = swiper.virtual;\n        if (!swiper.params.cssMode) {\n            swiper.updateActiveIndex();\n        }\n        const activeIndex = typeof forceActiveIndex === 'undefined' ? swiper.activeIndex || 0 : forceActiveIndex;\n        let offsetProp;\n        if (swiper.rtlTranslate)\n            offsetProp = 'right';\n        else\n            offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n        let slidesPerViewNumeric;\n        if (slidesPerView === 'auto') {\n            if (slidesPerViewAutoSlideSize) {\n                let swiperSize = swiper.size;\n                if (!swiperSize) {\n                    swiperSize = swiper.isHorizontal()\n                        ? swiper.el.getBoundingClientRect().width\n                        : swiper.el.getBoundingClientRect().height;\n                }\n                slidesPerViewNumeric = Math.max(1, Math.ceil(swiperSize / slidesPerViewAutoSlideSize));\n            }\n            else {\n                slidesPerViewNumeric = 1;\n            }\n        }\n        else {\n            slidesPerViewNumeric = slidesPerView ?? 1;\n        }\n        const groupSize = slidesPerGroup ?? 1;\n        let slidesAfter;\n        let slidesBefore;\n        if (centeredSlides) {\n            slidesAfter = Math.floor(slidesPerViewNumeric / 2) + groupSize + addSlidesAfter;\n            slidesBefore = Math.floor(slidesPerViewNumeric / 2) + groupSize + addSlidesBefore;\n        }\n        else {\n            slidesAfter = slidesPerViewNumeric + (groupSize - 1) + addSlidesAfter;\n            slidesBefore = (isLoop ? slidesPerViewNumeric : groupSize) + addSlidesBefore;\n        }\n        let from = activeIndex - slidesBefore;\n        let to = activeIndex + slidesAfter;\n        if (!isLoop) {\n            from = Math.max(from, 0);\n            to = Math.min(to, slides.length - 1);\n        }\n        let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n        if (isLoop && activeIndex >= slidesBefore) {\n            from -= slidesBefore;\n            if (!centeredSlides)\n                offset += swiper.slidesGrid[0];\n        }\n        else if (isLoop && activeIndex < slidesBefore) {\n            from = -slidesBefore;\n            if (centeredSlides)\n                offset += swiper.slidesGrid[0];\n        }\n        Object.assign(swiper.virtual, {\n            from,\n            to,\n            offset,\n            slidesGrid: swiper.slidesGrid,\n            slidesBefore,\n            slidesAfter,\n        });\n        function onRendered() {\n            swiper.updateSlides();\n            swiper.updateProgress();\n            swiper.updateSlidesClasses();\n            emit('virtualUpdate');\n        }\n        if (previousFrom === from && previousTo === to && !force) {\n            if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n                swiper.slides.forEach((slideEl) => {\n                    slideEl.style.setProperty(offsetProp, `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`);\n                });\n            }\n            swiper.updateProgress();\n            emit('virtualUpdate');\n            return;\n        }\n        const virtualParams = getParams();\n        if (virtualParams.renderExternal) {\n            const slidesToRender = [];\n            for (let i = from; i <= to; i += 1) {\n                slidesToRender.push(slides[i]);\n            }\n            virtualParams.renderExternal.call(swiper, {\n                offset,\n                from,\n                to,\n                slides: slidesToRender,\n            });\n            if (virtualParams.renderExternalUpdate) {\n                onRendered();\n            }\n            else {\n                emit('virtualUpdate');\n            }\n            return;\n        }\n        const prependIndexes = [];\n        const appendIndexes = [];\n        const getSlideIndex = (index) => {\n            let slideIndex = index;\n            if (index < 0) {\n                slideIndex = slides.length + index;\n            }\n            else if (slideIndex >= slides.length) {\n                slideIndex = slideIndex - slides.length;\n            }\n            return slideIndex;\n        };\n        if (force) {\n            swiper.slides\n                .filter((el) => el.matches(`.${swiper.params.slideClass}, swiper-slide`))\n                .forEach((slideEl) => {\n                slideEl.remove();\n            });\n        }\n        else {\n            for (let i = previousFrom; i <= previousTo; i += 1) {\n                if (i < from || i > to) {\n                    const slideIndex = getSlideIndex(i);\n                    swiper.slides\n                        .filter((el) => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`))\n                        .forEach((slideEl) => {\n                        slideEl.remove();\n                    });\n                }\n            }\n        }\n        const loopFrom = isLoop ? -slides.length : 0;\n        const loopTo = isLoop ? slides.length * 2 : slides.length;\n        for (let i = loopFrom; i < loopTo; i += 1) {\n            if (i >= from && i <= to) {\n                const slideIndex = getSlideIndex(i);\n                if (typeof previousTo === 'undefined' || force) {\n                    appendIndexes.push(slideIndex);\n                }\n                else {\n                    if (i > previousTo)\n                        appendIndexes.push(slideIndex);\n                    if (i < previousFrom)\n                        prependIndexes.push(slideIndex);\n                }\n            }\n        }\n        appendIndexes.forEach((index) => {\n            swiper.slidesEl.append(renderSlide(slides[index], index));\n        });\n        if (isLoop) {\n            for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\n                const index = prependIndexes[i];\n                swiper.slidesEl.prepend(renderSlide(slides[index], index));\n            }\n        }\n        else {\n            prependIndexes.sort((a, b) => b - a);\n            prependIndexes.forEach((index) => {\n                swiper.slidesEl.prepend(renderSlide(slides[index], index));\n            });\n        }\n        elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach((slideEl) => {\n            slideEl.style.setProperty(offsetProp, `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`);\n        });\n        onRendered();\n    }\n    function appendSlide(slides) {\n        if (slides !== null &&\n            typeof slides === 'object' &&\n            'length' in slides) {\n            const arr = slides;\n            for (let i = 0; i < arr.length; i += 1) {\n                if (arr[i])\n                    swiper.virtual.slides.push(arr[i]);\n            }\n        }\n        else {\n            swiper.virtual.slides.push(slides);\n        }\n        update(true);\n    }\n    function prependSlide(slides) {\n        const activeIndex = swiper.activeIndex;\n        let newActiveIndex = activeIndex + 1;\n        let numberOfNewSlides = 1;\n        if (Array.isArray(slides)) {\n            for (let i = 0; i < slides.length; i += 1) {\n                if (slides[i])\n                    swiper.virtual.slides.unshift(slides[i]);\n            }\n            newActiveIndex = activeIndex + slides.length;\n            numberOfNewSlides = slides.length;\n        }\n        else {\n            swiper.virtual.slides.unshift(slides);\n        }\n        if (getParams().cache) {\n            const cache = swiper.virtual.cache;\n            const newCache = {};\n            Object.keys(cache).forEach((cachedIndex) => {\n                const cachedEl = cache[Number(cachedIndex)];\n                const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n                if (cachedElIndex) {\n                    cachedEl.setAttribute('data-swiper-slide-index', String(parseInt(cachedElIndex, 10) + numberOfNewSlides));\n                }\n                newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n            });\n            swiper.virtual.cache = newCache;\n        }\n        update(true);\n        swiper.slideTo(newActiveIndex, 0);\n    }\n    function removeSlide(slidesIndexes) {\n        if (typeof slidesIndexes === 'undefined' || slidesIndexes === null)\n            return;\n        let activeIndex = swiper.activeIndex;\n        const shiftCacheDownFrom = (removedIndex) => {\n            Object.keys(swiper.virtual.cache).forEach((key) => {\n                const numericKey = Number(key);\n                if (numericKey > removedIndex) {\n                    const shifted = swiper.virtual.cache[numericKey];\n                    swiper.virtual.cache[numericKey - 1] = shifted;\n                    shifted.setAttribute('data-swiper-slide-index', String(numericKey - 1));\n                    delete swiper.virtual.cache[numericKey];\n                }\n            });\n        };\n        if (Array.isArray(slidesIndexes)) {\n            for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n                if (getParams().cache) {\n                    delete swiper.virtual.cache[slidesIndexes[i]];\n                    shiftCacheDownFrom(slidesIndexes[i]);\n                }\n                swiper.virtual.slides.splice(slidesIndexes[i], 1);\n                if (slidesIndexes[i] < activeIndex)\n                    activeIndex -= 1;\n                activeIndex = Math.max(activeIndex, 0);\n            }\n        }\n        else {\n            if (getParams().cache) {\n                delete swiper.virtual.cache[slidesIndexes];\n                shiftCacheDownFrom(slidesIndexes);\n            }\n            swiper.virtual.slides.splice(slidesIndexes, 1);\n            if (slidesIndexes < activeIndex)\n                activeIndex -= 1;\n            activeIndex = Math.max(activeIndex, 0);\n        }\n        update(true);\n        swiper.slideTo(activeIndex, 0);\n    }\n    function removeAllSlides() {\n        swiper.virtual.slides = [];\n        if (getParams().cache) {\n            swiper.virtual.cache = {};\n        }\n        update(true);\n        swiper.slideTo(0, 0);\n    }\n    on('beforeInit', () => {\n        if (!getParams().enabled)\n            return;\n        let domSlidesAssigned = false;\n        const passedVirtual = swiper.passedParams.virtual;\n        const passedSlidesUndefined = !passedVirtual || typeof passedVirtual !== 'object' || passedVirtual.slides === undefined;\n        if (passedSlidesUndefined) {\n            const slides = [...swiper.slidesEl.children].filter((el) => el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n            if (slides && slides.length) {\n                swiper.virtual.slides = [...slides];\n                domSlidesAssigned = true;\n                slides.forEach((slideEl, slideIndex) => {\n                    slideEl.setAttribute('data-swiper-slide-index', String(slideIndex));\n                    swiper.virtual.cache[slideIndex] = slideEl;\n                    slideEl.remove();\n                });\n            }\n        }\n        if (!domSlidesAssigned) {\n            swiper.virtual.slides = getParams().slides;\n        }\n        swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n        update(false, true);\n    });\n    on('setTranslate', () => {\n        if (!getParams().enabled)\n            return;\n        if (swiper.params.cssMode && !swiper._immediateVirtual) {\n            clearTimeout(cssModeTimeout);\n            cssModeTimeout = setTimeout(() => {\n                update();\n            }, 100);\n        }\n        else {\n            update();\n        }\n    });\n    on('init update resize', () => {\n        if (!getParams().enabled)\n            return;\n        if (swiper.params.cssMode) {\n            setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n        }\n    });\n    Object.assign(swiper.virtual, {\n        appendSlide,\n        prependSlide,\n        removeSlide,\n        removeAllSlides,\n        update,\n    });\n};\n\nexport { Virtual as default };\n","import { j as elementParents, h as elementOffset } from '../shared/utils.mjs';\n\nconst Keyboard = ({ swiper, extendParams, on, emit }) => {\n    extendParams({\n        keyboard: {\n            enabled: false,\n            onlyInViewport: true,\n            pageUpDown: true,\n            speed: undefined,\n        },\n    });\n    function getParams() {\n        return swiper.params.keyboard;\n    }\n    function handle(event) {\n        if (!swiper.enabled)\n            return;\n        const { rtlTranslate: rtl } = swiper;\n        const e = 'originalEvent' in event && event.originalEvent ? event.originalEvent : event;\n        const kc = e.keyCode || e.charCode;\n        const params = getParams();\n        const pageUpDown = !!params.pageUpDown;\n        const isPageUp = pageUpDown && kc === 33;\n        const isPageDown = pageUpDown && kc === 34;\n        const isArrowLeft = kc === 37;\n        const isArrowRight = kc === 39;\n        const isArrowUp = kc === 38;\n        const isArrowDown = kc === 40;\n        // Directions locks\n        if (!swiper.allowSlideNext &&\n            ((swiper.isHorizontal() && isArrowRight) ||\n                (swiper.isVertical() && isArrowDown) ||\n                isPageDown)) {\n            return false;\n        }\n        if (!swiper.allowSlidePrev &&\n            ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)) {\n            return false;\n        }\n        if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n            return undefined;\n        }\n        const activeElement = document.activeElement;\n        if (activeElement &&\n            (activeElement.isContentEditable ||\n                (activeElement.nodeName &&\n                    (activeElement.nodeName.toLowerCase() === 'input' ||\n                        activeElement.nodeName.toLowerCase() === 'textarea')))) {\n            return undefined;\n        }\n        if (params.onlyInViewport &&\n            (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n            let inView = false;\n            // Check that swiper should be inside of visible area of window\n            if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 &&\n                elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n                return undefined;\n            }\n            const el = swiper.el;\n            const swiperWidth = el.clientWidth;\n            const swiperHeight = el.clientHeight;\n            const windowWidth = window.innerWidth;\n            const windowHeight = window.innerHeight;\n            const swiperOffset = elementOffset(el);\n            if (rtl)\n                swiperOffset.left -= el.scrollLeft;\n            const swiperCoord = [\n                [swiperOffset.left, swiperOffset.top],\n                [swiperOffset.left + swiperWidth, swiperOffset.top],\n                [swiperOffset.left, swiperOffset.top + swiperHeight],\n                [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight],\n            ];\n            for (let i = 0; i < swiperCoord.length; i += 1) {\n                const point = swiperCoord[i];\n                if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n                    if (point[0] === 0 && point[1] === 0)\n                        continue;\n                    inView = true;\n                }\n            }\n            if (!inView)\n                return undefined;\n        }\n        const speed = params.speed;\n        if (swiper.isHorizontal()) {\n            if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n                if (e.cancelable)\n                    e.preventDefault();\n            }\n            if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl))\n                swiper.slideNext(speed);\n            if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl))\n                swiper.slidePrev(speed);\n        }\n        else {\n            if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n                if (e.cancelable)\n                    e.preventDefault();\n            }\n            if (isPageDown || isArrowDown)\n                swiper.slideNext(speed);\n            if (isPageUp || isArrowUp)\n                swiper.slidePrev(speed);\n        }\n        emit('keyPress', kc);\n        return undefined;\n    }\n    function enable() {\n        if (swiper.keyboard.enabled)\n            return;\n        document.addEventListener('keydown', handle);\n        swiper.keyboard.enabled = true;\n    }\n    function disable() {\n        if (!swiper.keyboard.enabled)\n            return;\n        document.removeEventListener('keydown', handle);\n        swiper.keyboard.enabled = false;\n    }\n    swiper.keyboard = {\n        enabled: false,\n        enable,\n        disable,\n    };\n    on('init', () => {\n        if (getParams().enabled) {\n            enable();\n        }\n    });\n    on('destroy', () => {\n        if (swiper.keyboard.enabled) {\n            disable();\n        }\n    });\n};\n\nexport { Keyboard as default };\n","import { u as nextTick, v as now } from '../shared/utils.mjs';\n\nconst Mousewheel = ({ swiper, extendParams, on, emit }) => {\n    extendParams({\n        mousewheel: {\n            enabled: false,\n            releaseOnEdges: false,\n            invert: false,\n            forceToAxis: false,\n            sensitivity: 1,\n            eventsTarget: 'container',\n            thresholdDelta: null,\n            thresholdTime: null,\n            noMousewheelClass: 'swiper-no-mousewheel',\n        },\n    });\n    let timeout;\n    let lastScrollTime = now();\n    let lastEventBeforeSnap;\n    let mouseEntered = false;\n    const recentWheelEvents = [];\n    function getParams() {\n        return swiper.params.mousewheel;\n    }\n    function normalize(e) {\n        // Reasonable defaults\n        const PIXEL_STEP = 10;\n        const LINE_HEIGHT = 40;\n        const PAGE_HEIGHT = 800;\n        const ev = e;\n        let sX = 0;\n        let sY = 0; // spinX, spinY\n        let pX = 0;\n        let pY = 0; // pixelX, pixelY\n        // Legacy\n        if (ev.detail !== undefined) {\n            sY = ev.detail;\n        }\n        if (ev.wheelDelta !== undefined) {\n            sY = -ev.wheelDelta / 120;\n        }\n        if (ev.wheelDeltaY !== undefined) {\n            sY = -ev.wheelDeltaY / 120;\n        }\n        if (ev.wheelDeltaX !== undefined) {\n            sX = -ev.wheelDeltaX / 120;\n        }\n        // side scrolling on FF with DOMMouseScroll\n        if (ev.axis !== undefined &&\n            ev.HORIZONTAL_AXIS !== undefined &&\n            ev.axis === ev.HORIZONTAL_AXIS) {\n            sX = sY;\n            sY = 0;\n        }\n        pX = sX * PIXEL_STEP;\n        pY = sY * PIXEL_STEP;\n        if (ev.deltaY !== undefined) {\n            pY = ev.deltaY;\n        }\n        if (ev.deltaX !== undefined) {\n            pX = ev.deltaX;\n        }\n        if (ev.shiftKey && !pX) {\n            // if user scrolls with shift he wants horizontal scroll\n            pX = pY;\n            pY = 0;\n        }\n        if ((pX || pY) && ev.deltaMode) {\n            if (ev.deltaMode === 1) {\n                // delta in LINE units\n                pX *= LINE_HEIGHT;\n                pY *= LINE_HEIGHT;\n            }\n            else {\n                // delta in PAGE units\n                pX *= PAGE_HEIGHT;\n                pY *= PAGE_HEIGHT;\n            }\n        }\n        // Fall-back if spin cannot be determined\n        if (pX && !sX) {\n            sX = pX < 1 ? -1 : 1;\n        }\n        if (pY && !sY) {\n            sY = pY < 1 ? -1 : 1;\n        }\n        return {\n            spinX: sX,\n            spinY: sY,\n            pixelX: pX,\n            pixelY: pY,\n        };\n    }\n    function handleMouseEnter() {\n        if (!swiper.enabled)\n            return;\n        mouseEntered = true;\n    }\n    function handleMouseLeave() {\n        if (!swiper.enabled)\n            return;\n        mouseEntered = false;\n    }\n    function animateSlider(newEvent) {\n        const params = getParams();\n        if (params.thresholdDelta && newEvent.delta < params.thresholdDelta) {\n            // Prevent if delta of wheel scroll delta is below configured threshold\n            return false;\n        }\n        if (params.thresholdTime && now() - lastScrollTime < params.thresholdTime) {\n            // Prevent if time between scrolls is below configured threshold\n            return false;\n        }\n        // If the movement is NOT big enough and\n        // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n        //   Don't go any further (avoid insignificant scroll movement).\n        if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n            // Return false as a default\n            return true;\n        }\n        if (newEvent.direction < 0) {\n            if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n                swiper.slideNext();\n                emit('scroll', newEvent.raw);\n            }\n        }\n        else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n            swiper.slidePrev();\n            emit('scroll', newEvent.raw);\n        }\n        // If you got here is because an animation has been triggered so store the current time\n        lastScrollTime = new window.Date().getTime();\n        // Return false as a default\n        return false;\n    }\n    function releaseScroll(newEvent) {\n        const params = getParams();\n        if (newEvent.direction < 0) {\n            if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n                // Return true to animate scroll on edges\n                return true;\n            }\n        }\n        else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n            // Return true to animate scroll on edges\n            return true;\n        }\n        return false;\n    }\n    function handle(event) {\n        let e = 'originalEvent' in event && event.originalEvent ? event.originalEvent : event;\n        let disableParentSwiper = true;\n        if (!swiper.enabled)\n            return false;\n        // Ignore event if the target or its parents have the swiper-no-mousewheel class\n        const params = getParams();\n        if (event.target.closest(`.${params.noMousewheelClass}`))\n            return false;\n        if (swiper.params.cssMode) {\n            e.preventDefault();\n        }\n        let targetEl = swiper.el;\n        if (params.eventsTarget !== 'container') {\n            targetEl = document.querySelector(params.eventsTarget);\n        }\n        const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n        if (!mouseEntered && !targetElContainsTarget && !params.releaseOnEdges)\n            return true;\n        let delta = 0;\n        const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n        const data = normalize(e);\n        if (params.forceToAxis) {\n            if (swiper.isHorizontal()) {\n                if (Math.abs(data.pixelX) > Math.abs(data.pixelY))\n                    delta = -data.pixelX * rtlFactor;\n                else\n                    return true;\n            }\n            else if (Math.abs(data.pixelY) > Math.abs(data.pixelX))\n                delta = -data.pixelY;\n            else\n                return true;\n        }\n        else {\n            delta =\n                Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n        }\n        if (delta === 0)\n            return true;\n        if (params.invert)\n            delta = -delta;\n        // Get the scroll positions\n        let positions = swiper.getTranslate() + delta * (params.sensitivity ?? 1);\n        if (positions >= swiper.minTranslate())\n            positions = swiper.minTranslate();\n        if (positions <= swiper.maxTranslate())\n            positions = swiper.maxTranslate();\n        // When loop is true:\n        //     the disableParentSwiper will be true.\n        // When loop is false:\n        //     if the scroll positions is not on edge,\n        //     then the disableParentSwiper will be true.\n        //     if the scroll on edge positions,\n        //     then the disableParentSwiper will be false.\n        disableParentSwiper = swiper.params.loop\n            ? true\n            : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n        if (disableParentSwiper && swiper.params.nested)\n            e.stopPropagation();\n        const freeModeParams = swiper.params.freeMode;\n        if (!swiper.params.freeMode || !freeModeParams?.enabled) {\n            // Register the new event in a variable which stores the relevant data\n            const newEvent = {\n                time: now(),\n                delta: Math.abs(delta),\n                direction: Math.sign(delta),\n                raw: event,\n            };\n            // Keep the most recent events\n            if (recentWheelEvents.length >= 2) {\n                recentWheelEvents.shift(); // only store the last N events\n            }\n            const prevEvent = recentWheelEvents.length\n                ? recentWheelEvents[recentWheelEvents.length - 1]\n                : undefined;\n            recentWheelEvents.push(newEvent);\n            if (prevEvent) {\n                if (newEvent.direction !== prevEvent.direction ||\n                    newEvent.delta > prevEvent.delta ||\n                    newEvent.time > prevEvent.time + 150) {\n                    animateSlider(newEvent);\n                }\n            }\n            else {\n                animateSlider(newEvent);\n            }\n            // If it's time to release the scroll:\n            //   Return now so you don't hit the preventDefault.\n            if (releaseScroll(newEvent)) {\n                return true;\n            }\n        }\n        else {\n            // Freemode or scrollContainer:\n            const newEvent = {\n                time: now(),\n                delta: Math.abs(delta),\n                direction: Math.sign(delta),\n            };\n            const ignoreWheelEvents = lastEventBeforeSnap &&\n                newEvent.time < lastEventBeforeSnap.time + 500 &&\n                newEvent.delta <= lastEventBeforeSnap.delta &&\n                newEvent.direction === lastEventBeforeSnap.direction;\n            if (!ignoreWheelEvents) {\n                lastEventBeforeSnap = undefined;\n                let position = swiper.getTranslate() + delta * (params.sensitivity ?? 1);\n                const wasBeginning = swiper.isBeginning;\n                const wasEnd = swiper.isEnd;\n                if (position >= swiper.minTranslate())\n                    position = swiper.minTranslate();\n                if (position <= swiper.maxTranslate())\n                    position = swiper.maxTranslate();\n                swiper.setTransition(0);\n                swiper.setTranslate(position);\n                swiper.updateProgress();\n                swiper.updateActiveIndex();\n                swiper.updateSlidesClasses();\n                if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n                    swiper.updateSlidesClasses();\n                }\n                if (swiper.params.loop) {\n                    swiper.loopFix({\n                        direction: newEvent.direction < 0 ? 'next' : 'prev',\n                        byMousewheel: true,\n                    });\n                }\n                if (freeModeParams?.sticky) {\n                    clearTimeout(timeout);\n                    timeout = undefined;\n                    if (recentWheelEvents.length >= 15) {\n                        recentWheelEvents.shift(); // only store the last N events\n                    }\n                    const prevEvent = recentWheelEvents.length\n                        ? recentWheelEvents[recentWheelEvents.length - 1]\n                        : undefined;\n                    const firstEvent = recentWheelEvents[0];\n                    recentWheelEvents.push(newEvent);\n                    if (prevEvent &&\n                        (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n                        // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n                        recentWheelEvents.splice(0);\n                    }\n                    else if (recentWheelEvents.length >= 15 &&\n                        firstEvent &&\n                        newEvent.time - firstEvent.time < 500 &&\n                        firstEvent.delta - newEvent.delta >= 1 &&\n                        newEvent.delta <= 6) {\n                        const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n                        lastEventBeforeSnap = newEvent;\n                        recentWheelEvents.splice(0);\n                        timeout = nextTick(() => {\n                            if (swiper.destroyed || !swiper.params)\n                                return;\n                            swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n                        }, 0); // no delay; move on next tick\n                    }\n                    if (!timeout) {\n                        timeout = nextTick(() => {\n                            if (swiper.destroyed || !swiper.params)\n                                return;\n                            const snapToThreshold = 0.5;\n                            lastEventBeforeSnap = newEvent;\n                            recentWheelEvents.splice(0);\n                            swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n                        }, 500);\n                    }\n                }\n                // Emit event\n                if (!ignoreWheelEvents)\n                    emit('scroll', e);\n                // Stop autoplay\n                const autoplayParams = swiper.params.autoplay;\n                if (swiper.params.autoplay && autoplayParams?.disableOnInteraction) {\n                    swiper.autoplay.stop();\n                }\n                // Return page scroll on edge positions\n                if (params.releaseOnEdges &&\n                    (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n                    return true;\n                }\n            }\n        }\n        if (e.cancelable)\n            e.preventDefault();\n        return false;\n    }\n    function events(method) {\n        const params = getParams();\n        let targetEl = swiper.el;\n        if (params.eventsTarget !== 'container') {\n            targetEl = document.querySelector(params.eventsTarget);\n        }\n        targetEl[method]('mouseenter', handleMouseEnter);\n        targetEl[method]('mouseleave', handleMouseLeave);\n        targetEl[method]('wheel', handle);\n    }\n    function enable() {\n        if (swiper.params.cssMode) {\n            swiper.wrapperEl.removeEventListener('wheel', handle);\n            return true;\n        }\n        if (swiper.mousewheel.enabled)\n            return false;\n        events('addEventListener');\n        swiper.mousewheel.enabled = true;\n        return true;\n    }\n    function disable() {\n        if (swiper.params.cssMode) {\n            swiper.wrapperEl.addEventListener('wheel', handle);\n            return true;\n        }\n        if (!swiper.mousewheel.enabled)\n            return false;\n        events('removeEventListener');\n        swiper.mousewheel.enabled = false;\n        return true;\n    }\n    on('init', () => {\n        const params = getParams();\n        if (!params.enabled && swiper.params.cssMode) {\n            disable();\n        }\n        if (params.enabled)\n            enable();\n    });\n    swiper.mousewheel = {\n        enabled: false,\n        enable,\n        disable,\n    };\n    on('destroy', () => {\n        if (swiper.params.cssMode) {\n            enable();\n        }\n        if (swiper.mousewheel.enabled)\n            disable();\n    });\n};\n\nexport { Mousewheel as default };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { t as makeElementsArray, c as classesToTokens, a as createElement, u as nextTick, h as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\n\nconst Scrollbar = ({ swiper, extendParams, on, emit }) => {\n    let isTouched = false;\n    let timeout = null;\n    let dragTimeout = null;\n    let dragStartPos = 0;\n    let dragSize = 0;\n    let trackSize = 0;\n    let divider = 0;\n    extendParams({\n        scrollbar: {\n            el: null,\n            dragSize: 'auto',\n            hide: false,\n            draggable: false,\n            snapOnRelease: true,\n            lockClass: 'swiper-scrollbar-lock',\n            dragClass: 'swiper-scrollbar-drag',\n            scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n            horizontalClass: `swiper-scrollbar-horizontal`,\n            verticalClass: `swiper-scrollbar-vertical`,\n        },\n    });\n    // Initialized as a partial; remaining methods (updateSize, setTranslate,\n    // init, destroy, enable, disable) attach after their definitions below.\n    swiper.scrollbar = {\n        el: null,\n        dragEl: null,\n    };\n    function getParams() {\n        return swiper.params.scrollbar;\n    }\n    // Positions the drag element from the current progress and track/drag sizes.\n    function updateDragPosition() {\n        const { rtlTranslate: rtl } = swiper;\n        const { dragEl } = swiper.scrollbar;\n        const progress = swiper.params.loop ? (swiper.progressLoop ?? 0) : swiper.progress;\n        let newSize = dragSize;\n        let newPos = (trackSize - dragSize) * progress;\n        if (rtl) {\n            newPos = -newPos;\n            if (newPos > 0) {\n                newSize = dragSize - newPos;\n                newPos = 0;\n            }\n            else if (-newPos + dragSize > trackSize) {\n                newSize = trackSize + newPos;\n            }\n        }\n        else if (newPos < 0) {\n            newSize = dragSize + newPos;\n            newPos = 0;\n        }\n        else if (newPos + dragSize > trackSize) {\n            newSize = trackSize - newPos;\n        }\n        if (swiper.isHorizontal()) {\n            dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n            dragEl.style.width = `${newSize}px`;\n        }\n        else {\n            dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n            dragEl.style.height = `${newSize}px`;\n        }\n    }\n    function setTranslate() {\n        const params = getParams();\n        if (!params.el || !swiper.scrollbar.el)\n            return;\n        const { el } = swiper.scrollbar;\n        updateDragPosition();\n        if (params.hide) {\n            if (timeout)\n                clearTimeout(timeout);\n            el.style.opacity = '1';\n            timeout = setTimeout(() => {\n                el.style.opacity = '0';\n                el.style.transitionDuration = '400ms';\n            }, 1000);\n        }\n    }\n    function setTransition(duration) {\n        if (!getParams().el || !swiper.scrollbar.el)\n            return;\n        swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n    }\n    function updateSize() {\n        const params = getParams();\n        if (!params.el || !swiper.scrollbar.el)\n            return;\n        const { scrollbar } = swiper;\n        const { dragEl, el } = scrollbar;\n        dragEl.style.width = '';\n        dragEl.style.height = '';\n        trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n        divider =\n            swiper.size /\n                (swiper.virtualSize +\n                    (swiper.params.slidesOffsetBefore ?? 0) -\n                    (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n        if (params.dragSize === 'auto') {\n            dragSize = trackSize * divider;\n        }\n        else {\n            dragSize = parseInt(String(params.dragSize), 10);\n        }\n        // Size and position the drag for the new sizes without the show/hide side effects of setTranslate().\n        updateDragPosition();\n        if (divider >= 1) {\n            el.style.display = 'none';\n        }\n        else {\n            el.style.display = '';\n        }\n        if (params.hide) {\n            el.style.opacity = '0';\n        }\n        if (swiper.params.watchOverflow && swiper.enabled) {\n            scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n        }\n    }\n    function getPointerPosition(e) {\n        if (swiper.isHorizontal()) {\n            return e.clientX ?? e.touches?.[0]?.clientX ?? 0;\n        }\n        return e.clientY ?? e.touches?.[0]?.clientY ?? 0;\n    }\n    function setDragPosition(e) {\n        const { scrollbar, rtlTranslate: rtl } = swiper;\n        const { el } = scrollbar;\n        let positionRatio;\n        positionRatio =\n            (getPointerPosition(e) -\n                elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] -\n                (dragStartPos !== null ? dragStartPos : dragSize / 2)) /\n                (trackSize - dragSize);\n        positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n        if (rtl) {\n            positionRatio = 1 - positionRatio;\n        }\n        const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n        swiper.updateProgress(position);\n        swiper.setTranslate(position);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n    }\n    function onDragStart(e) {\n        const params = getParams();\n        const { scrollbar, wrapperEl } = swiper;\n        const { el, dragEl } = scrollbar;\n        isTouched = true;\n        dragStartPos =\n            e.target === dragEl\n                ? getPointerPosition(e) -\n                    e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top']\n                : null;\n        e.preventDefault();\n        e.stopPropagation();\n        wrapperEl.style.transitionDuration = '100ms';\n        dragEl.style.transitionDuration = '100ms';\n        setDragPosition(e);\n        if (dragTimeout)\n            clearTimeout(dragTimeout);\n        el.style.transitionDuration = '0ms';\n        if (params.hide) {\n            el.style.opacity = '1';\n        }\n        if (swiper.params.cssMode) {\n            swiper.wrapperEl.style.scrollSnapType = 'none';\n        }\n        emit('scrollbarDragStart', e);\n    }\n    function onDragMove(e) {\n        const { scrollbar, wrapperEl } = swiper;\n        const { el, dragEl } = scrollbar;\n        if (!isTouched)\n            return;\n        if (e.cancelable)\n            e.preventDefault();\n        setDragPosition(e);\n        wrapperEl.style.transitionDuration = '0ms';\n        el.style.transitionDuration = '0ms';\n        dragEl.style.transitionDuration = '0ms';\n        emit('scrollbarDragMove', e);\n    }\n    function onDragEnd(e) {\n        const params = getParams();\n        const { scrollbar, wrapperEl } = swiper;\n        const { el } = scrollbar;\n        if (!isTouched)\n            return;\n        isTouched = false;\n        if (swiper.params.cssMode) {\n            swiper.wrapperEl.style.scrollSnapType = '';\n            wrapperEl.style.transitionDuration = '';\n        }\n        if (params.hide) {\n            if (dragTimeout)\n                clearTimeout(dragTimeout);\n            dragTimeout = nextTick(() => {\n                el.style.opacity = '0';\n                el.style.transitionDuration = '400ms';\n            }, 1000);\n        }\n        emit('scrollbarDragEnd', e);\n        if (params.snapOnRelease) {\n            swiper.slideToClosest();\n        }\n    }\n    function events(method) {\n        const { scrollbar, params } = swiper;\n        const el = scrollbar.el;\n        if (!el)\n            return;\n        const activeListener = params.passiveListeners ? { passive: false, capture: false } : false;\n        const passiveListener = params.passiveListeners ? { passive: true, capture: false } : false;\n        const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n        el[eventMethod]('pointerdown', onDragStart, activeListener);\n        document[eventMethod]('pointermove', onDragMove, activeListener);\n        document[eventMethod]('pointerup', onDragEnd, passiveListener);\n    }\n    function enableDraggable() {\n        if (!getParams().el || !swiper.scrollbar.el)\n            return;\n        events('on');\n    }\n    function disableDraggable() {\n        if (!getParams().el || !swiper.scrollbar.el)\n            return;\n        events('off');\n    }\n    function init() {\n        const { scrollbar, el: swiperEl } = swiper;\n        swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, { el: 'swiper-scrollbar' });\n        const params = getParams();\n        if (!params.el)\n            return;\n        let el;\n        if (typeof params.el === 'string' && swiper.isElement) {\n            el = swiper.el.querySelector(params.el);\n        }\n        if (!el && typeof params.el === 'string') {\n            el = document.querySelectorAll(params.el);\n            if (!el.length)\n                return;\n        }\n        else if (!el) {\n            el = params.el;\n        }\n        if (swiper.params.uniqueNavElements &&\n            typeof params.el === 'string' &&\n            el.length > 1 &&\n            swiperEl.querySelectorAll(params.el).length === 1) {\n            el = swiperEl.querySelector(params.el);\n        }\n        if (el.length > 0) {\n            el = el[0];\n        }\n        const elTyped = el;\n        elTyped.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        let dragEl = null;\n        if (elTyped) {\n            dragEl = elTyped.querySelector(classesToSelector(params.dragClass));\n            if (!dragEl) {\n                dragEl = createElement('div', params.dragClass);\n                elTyped.append(dragEl);\n            }\n        }\n        Object.assign(scrollbar, {\n            el: elTyped,\n            dragEl,\n        });\n        if (params.draggable) {\n            enableDraggable();\n        }\n        if (elTyped) {\n            elTyped.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(params.lockClass));\n        }\n    }\n    function destroy() {\n        const params = getParams();\n        const el = swiper.scrollbar.el;\n        if (el) {\n            el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n        }\n        disableDraggable();\n    }\n    on('changeDirection', () => {\n        if (!swiper.scrollbar || !swiper.scrollbar.el)\n            return;\n        const params = getParams();\n        const els = makeElementsArray(swiper.scrollbar.el);\n        els.forEach((subEl) => {\n            subEl.classList.remove(params.horizontalClass, params.verticalClass);\n            subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        });\n    });\n    on('init', () => {\n        if (getParams().enabled === false) {\n            disable();\n        }\n        else {\n            init();\n            updateSize();\n            setTranslate();\n        }\n    });\n    on('update resize observerUpdate lock unlock changeDirection', () => {\n        updateSize();\n    });\n    on('setTranslate', () => {\n        setTranslate();\n    });\n    on('setTransition', (_s, duration) => {\n        setTransition(duration);\n    });\n    on('enable disable', () => {\n        const { el } = swiper.scrollbar;\n        if (el) {\n            el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(getParams().lockClass));\n        }\n    });\n    on('destroy', () => {\n        destroy();\n    });\n    const enable = () => {\n        const params = getParams();\n        swiper.el.classList.remove(...classesToTokens(params.scrollbarDisabledClass));\n        if (swiper.scrollbar.el) {\n            swiper.scrollbar.el.classList.remove(...classesToTokens(params.scrollbarDisabledClass));\n        }\n        init();\n        updateSize();\n        setTranslate();\n    };\n    const disable = () => {\n        const params = getParams();\n        swiper.el.classList.add(...classesToTokens(params.scrollbarDisabledClass));\n        if (swiper.scrollbar.el) {\n            swiper.scrollbar.el.classList.add(...classesToTokens(params.scrollbarDisabledClass));\n        }\n        destroy();\n    };\n    Object.assign(swiper.scrollbar, {\n        enable,\n        disable,\n        updateSize,\n        setTranslate,\n        init,\n        destroy,\n    });\n};\n\nexport { Scrollbar as default };\n","import { e as elementChildren } from '../shared/utils.mjs';\n\nconst Parallax = ({ swiper, extendParams, on }) => {\n    extendParams({\n        parallax: {\n            enabled: false,\n        },\n    });\n    function getParams() {\n        return swiper.params.parallax;\n    }\n    const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';\n    const setTransform = (el, progress) => {\n        const { rtl } = swiper;\n        const rtlFactor = rtl ? -1 : 1;\n        const p = el.getAttribute('data-swiper-parallax') || '0';\n        let x = el.getAttribute('data-swiper-parallax-x');\n        let y = el.getAttribute('data-swiper-parallax-y');\n        const scale = el.getAttribute('data-swiper-parallax-scale');\n        const opacity = el.getAttribute('data-swiper-parallax-opacity');\n        const rotate = el.getAttribute('data-swiper-parallax-rotate');\n        if (x || y) {\n            x = x || '0';\n            y = y || '0';\n        }\n        else if (swiper.isHorizontal()) {\n            x = p;\n            y = '0';\n        }\n        else {\n            y = p;\n            x = '0';\n        }\n        if (x.indexOf('%') >= 0) {\n            x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n        }\n        else {\n            x = `${Number(x) * progress * rtlFactor}px`;\n        }\n        if (y.indexOf('%') >= 0) {\n            y = `${parseInt(y, 10) * progress}%`;\n        }\n        else {\n            y = `${Number(y) * progress}px`;\n        }\n        if (typeof opacity !== 'undefined' && opacity !== null) {\n            const opacityNum = Number(opacity);\n            const currentOpacity = opacityNum - (opacityNum - 1) * (1 - Math.abs(progress));\n            el.style.opacity = String(currentOpacity);\n        }\n        let transform = `translate3d(${x}, ${y}, 0px)`;\n        if (typeof scale !== 'undefined' && scale !== null) {\n            const scaleNum = Number(scale);\n            const currentScale = scaleNum - (scaleNum - 1) * (1 - Math.abs(progress));\n            transform += ` scale(${currentScale})`;\n        }\n        if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n            const currentRotate = Number(rotate) * progress * -1;\n            transform += ` rotate(${currentRotate}deg)`;\n        }\n        el.style.transform = transform;\n    };\n    const setTranslate = () => {\n        const { el, slides, progress, snapGrid } = swiper;\n        const elements = elementChildren(el, elementsSelector);\n        if (swiper.isElement) {\n            elements.push(...elementChildren(swiper.hostEl, elementsSelector));\n        }\n        elements.forEach((subEl) => {\n            setTransform(subEl, progress);\n        });\n        slides.forEach((slideEl, slideIndex) => {\n            let slideProgress = slideEl.progress ?? 0;\n            const slidesPerGroup = swiper.params.slidesPerGroup ?? 1;\n            if (slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n                slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n            }\n            slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n            slideEl\n                .querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`)\n                .forEach((subEl) => {\n                setTransform(subEl, slideProgress);\n            });\n        });\n    };\n    const setTransition = (duration = swiper.params.speed ?? 300) => {\n        const { el, hostEl } = swiper;\n        const elements = [...el.querySelectorAll(elementsSelector)];\n        if (swiper.isElement) {\n            elements.push(...hostEl.querySelectorAll(elementsSelector));\n        }\n        elements.forEach((parallaxEl) => {\n            const attr = parallaxEl.getAttribute('data-swiper-parallax-duration');\n            let parallaxDuration = (attr ? parseInt(attr, 10) : 0) || duration;\n            if (duration === 0)\n                parallaxDuration = 0;\n            parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n        });\n    };\n    on('beforeInit', () => {\n        if (!getParams().enabled)\n            return;\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n    });\n    on('init', () => {\n        if (!getParams().enabled)\n            return;\n        setTranslate();\n    });\n    on('setTranslate', () => {\n        if (!getParams().enabled)\n            return;\n        setTranslate();\n    });\n    on('setTransition', (_swiper, duration) => {\n        if (!getParams().enabled)\n            return;\n        setTransition(duration);\n    });\n};\n\nexport { Parallax as default };\n","import { e as elementChildren, j as elementParents, h as elementOffset, q as getTranslate } from '../shared/utils.mjs';\n\nconst Zoom = ({ swiper, extendParams, on, emit }) => {\n    extendParams({\n        zoom: {\n            enabled: false,\n            limitToOriginalSize: false,\n            maxRatio: 3,\n            minRatio: 1,\n            panOnMouseMove: false,\n            toggle: true,\n            containerClass: 'swiper-zoom-container',\n            zoomedSlideClass: 'swiper-slide-zoomed',\n        },\n    });\n    swiper.zoom = {\n        enabled: false,\n    };\n    function getParams() {\n        return swiper.params.zoom;\n    }\n    let currentScale = 1;\n    let isScaling = false;\n    let isPanningWithMouse = false;\n    let mousePanStart = { x: 0, y: 0 };\n    const mousePanSensitivity = -3; // Negative to invert pan direction\n    let fakeGestureTouched = false;\n    let fakeGestureMoved = false;\n    const evCache = [];\n    const gesture = {\n        originX: 0,\n        originY: 0,\n        slideEl: undefined,\n        slideWidth: undefined,\n        slideHeight: undefined,\n        imageEl: undefined,\n        imageWrapEl: undefined,\n        maxRatio: 3,\n    };\n    const image = {\n        isTouched: undefined,\n        isMoved: undefined,\n        currentX: undefined,\n        currentY: undefined,\n        minX: undefined,\n        minY: undefined,\n        maxX: undefined,\n        maxY: undefined,\n        width: undefined,\n        height: undefined,\n        startX: undefined,\n        startY: undefined,\n        touchesStart: {},\n        touchesCurrent: {},\n    };\n    const velocity = {\n        x: undefined,\n        y: undefined,\n        prevPositionX: undefined,\n        prevPositionY: undefined,\n        prevTime: undefined,\n    };\n    let scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n        get() {\n            return scale;\n        },\n        set(value) {\n            if (scale !== value) {\n                const imageEl = gesture.imageEl;\n                const slideEl = gesture.slideEl;\n                emit('zoomChange', value, imageEl, slideEl);\n            }\n            scale = value;\n        },\n    });\n    function getDistanceBetweenTouches() {\n        if (evCache.length < 2)\n            return 1;\n        const x1 = evCache[0].pageX;\n        const y1 = evCache[0].pageY;\n        const x2 = evCache[1].pageX;\n        const y2 = evCache[1].pageY;\n        const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n        return distance;\n    }\n    function getMaxRatio() {\n        const params = getParams();\n        const attr = gesture.imageWrapEl?.getAttribute('data-swiper-zoom');\n        const maxRatio = attr != null ? Number(attr) : params.maxRatio;\n        const imageEl = gesture.imageEl;\n        if (params.limitToOriginalSize && imageEl && imageEl.naturalWidth) {\n            const imageMaxRatio = imageEl.naturalWidth / imageEl.offsetWidth;\n            return Math.min(imageMaxRatio, maxRatio);\n        }\n        return maxRatio;\n    }\n    function getScaleOrigin() {\n        if (evCache.length < 2 || !gesture.imageEl)\n            return [null, null];\n        const box = gesture.imageEl.getBoundingClientRect();\n        return [\n            (evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) /\n                currentScale,\n            (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) /\n                currentScale,\n        ];\n    }\n    function getSlideSelector() {\n        return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n    }\n    function eventWithinSlide(e) {\n        const slideSelector = getSlideSelector();\n        const target = e.target;\n        if (!target)\n            return false;\n        if (target.matches(slideSelector))\n            return true;\n        if (swiper.slides.filter((slideEl) => slideEl.contains(target)).length > 0)\n            return true;\n        return false;\n    }\n    function eventWithinZoomContainer(e) {\n        const selector = `.${getParams().containerClass}`;\n        const target = e.target;\n        if (!target)\n            return false;\n        if (target.matches(selector))\n            return true;\n        if ([...swiper.hostEl.querySelectorAll(selector)].filter((containerEl) => containerEl.contains(target)).length > 0)\n            return true;\n        return false;\n    }\n    // Events\n    function onGestureStart(e) {\n        if (e.pointerType === 'mouse') {\n            evCache.splice(0, evCache.length);\n        }\n        if (!eventWithinSlide(e))\n            return;\n        const params = getParams();\n        fakeGestureTouched = false;\n        fakeGestureMoved = false;\n        evCache.push(e);\n        if (evCache.length < 2) {\n            return;\n        }\n        fakeGestureTouched = true;\n        gesture.scaleStart = getDistanceBetweenTouches();\n        if (!gesture.slideEl) {\n            const target = e.target;\n            gesture.slideEl =\n                target?.closest(`.${swiper.params.slideClass}, swiper-slide`) ??\n                    undefined;\n            if (!gesture.slideEl)\n                gesture.slideEl = swiper.slides[swiper.activeIndex];\n            let imageEl = gesture.slideEl?.querySelector(`.${params.containerClass}`) ?? null;\n            if (imageEl) {\n                imageEl =\n                    imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0] ?? null;\n            }\n            gesture.imageEl = imageEl ?? undefined;\n            if (imageEl) {\n                gesture.imageWrapEl =\n                    elementParents(imageEl, `.${params.containerClass}`)[0] ??\n                        undefined;\n            }\n            else {\n                gesture.imageWrapEl = undefined;\n            }\n            if (!gesture.imageWrapEl) {\n                gesture.imageEl = undefined;\n                return;\n            }\n            gesture.maxRatio = getMaxRatio();\n        }\n        if (gesture.imageEl) {\n            const [originX, originY] = getScaleOrigin();\n            gesture.originX = originX ?? 0;\n            gesture.originY = originY ?? 0;\n            gesture.imageEl.style.transitionDuration = '0ms';\n        }\n        isScaling = true;\n    }\n    function onGestureChange(e) {\n        if (!eventWithinSlide(e))\n            return;\n        const params = getParams();\n        const zoom = swiper.zoom;\n        const pointerIndex = evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);\n        if (pointerIndex >= 0)\n            evCache[pointerIndex] = e;\n        if (evCache.length < 2) {\n            return;\n        }\n        fakeGestureMoved = true;\n        gesture.scaleMove = getDistanceBetweenTouches();\n        if (!gesture.imageEl) {\n            return;\n        }\n        zoom.scale = (gesture.scaleMove / (gesture.scaleStart ?? 1)) * currentScale;\n        if (zoom.scale > gesture.maxRatio) {\n            zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n        }\n        if (zoom.scale < params.minRatio) {\n            zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n        }\n        gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n    }\n    function onGestureEnd(e) {\n        if (!eventWithinSlide(e))\n            return;\n        if (e.pointerType === 'mouse' && e.type === 'pointerout')\n            return;\n        const params = getParams();\n        const zoom = swiper.zoom;\n        const pointerIndex = evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);\n        if (pointerIndex >= 0)\n            evCache.splice(pointerIndex, 1);\n        if (!fakeGestureTouched || !fakeGestureMoved) {\n            return;\n        }\n        fakeGestureTouched = false;\n        fakeGestureMoved = false;\n        if (!gesture.imageEl)\n            return;\n        zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n        gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n        gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n        currentScale = zoom.scale;\n        isScaling = false;\n        if (zoom.scale > 1 && gesture.slideEl) {\n            gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n        }\n        else if (zoom.scale <= 1 && gesture.slideEl) {\n            gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n        }\n        if (zoom.scale === 1) {\n            gesture.originX = 0;\n            gesture.originY = 0;\n            gesture.slideEl = undefined;\n        }\n    }\n    let allowTouchMoveTimeout;\n    function allowTouchMove() {\n        swiper.touchEventsData.preventTouchMoveFromPointerMove = false;\n    }\n    function preventTouchMove() {\n        if (allowTouchMoveTimeout !== undefined)\n            clearTimeout(allowTouchMoveTimeout);\n        swiper.touchEventsData.preventTouchMoveFromPointerMove = true;\n        allowTouchMoveTimeout = setTimeout(() => {\n            if (swiper.destroyed)\n                return;\n            allowTouchMove();\n        });\n    }\n    function onTouchStart(e) {\n        const device = swiper.device;\n        if (image.isTouched)\n            return;\n        // Record the position before the imageEl guard, it is unset until the first pinch or zoom\n        const event = evCache.length > 0 ? evCache[0] : e;\n        image.touchesStart.x = event.pageX;\n        image.touchesStart.y = event.pageY;\n        if (!gesture.imageEl)\n            return;\n        if (device.android && e.cancelable)\n            e.preventDefault();\n        image.isTouched = true;\n    }\n    function onTouchMove(e) {\n        const isMouseEvent = e.pointerType === 'mouse';\n        const isMousePan = isMouseEvent && getParams().panOnMouseMove;\n        if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) {\n            return;\n        }\n        const zoom = swiper.zoom;\n        if (!gesture.imageEl) {\n            return;\n        }\n        if (!image.isTouched || !gesture.slideEl) {\n            if (isMousePan)\n                onMouseMove(e);\n            return;\n        }\n        if (isMousePan) {\n            onMouseMove(e);\n            return;\n        }\n        if (!image.isMoved) {\n            image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n            image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n            image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n            image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n            gesture.slideWidth = gesture.slideEl.offsetWidth;\n            gesture.slideHeight = gesture.slideEl.offsetHeight;\n            gesture.imageWrapEl.style.transitionDuration = '0ms';\n        }\n        // Define if we need image drag\n        const scaledWidth = image.width * zoom.scale;\n        const scaledHeight = image.height * zoom.scale;\n        image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n        image.maxX = -image.minX;\n        image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n        image.maxY = -image.minY;\n        image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n        image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n        const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - (image.touchesStart.x ?? 0)), Math.abs(image.touchesCurrent.y - (image.touchesStart.y ?? 0)));\n        if (touchesDiff > 5) {\n            swiper.allowClick = false;\n        }\n        const startX = image.startX ?? 0;\n        const startY = image.startY ?? 0;\n        if (!image.isMoved && !isScaling) {\n            if (swiper.isHorizontal() &&\n                ((Math.floor(image.minX) === Math.floor(startX) &&\n                    image.touchesCurrent.x < (image.touchesStart.x ?? 0)) ||\n                    (Math.floor(image.maxX) === Math.floor(startX) &&\n                        image.touchesCurrent.x > (image.touchesStart.x ?? 0)))) {\n                image.isTouched = false;\n                allowTouchMove();\n                return;\n            }\n            if (!swiper.isHorizontal() &&\n                ((Math.floor(image.minY) === Math.floor(startY) &&\n                    image.touchesCurrent.y < (image.touchesStart.y ?? 0)) ||\n                    (Math.floor(image.maxY) === Math.floor(startY) &&\n                        image.touchesCurrent.y > (image.touchesStart.y ?? 0)))) {\n                image.isTouched = false;\n                allowTouchMove();\n                return;\n            }\n        }\n        if (e.cancelable) {\n            e.preventDefault();\n        }\n        e.stopPropagation();\n        preventTouchMove();\n        image.isMoved = true;\n        const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - getParams().minRatio);\n        const { originX, originY } = gesture;\n        image.currentX =\n            image.touchesCurrent.x -\n                (image.touchesStart.x ?? 0) +\n                startX +\n                scaleRatio * (image.width - originX * 2);\n        image.currentY =\n            image.touchesCurrent.y -\n                (image.touchesStart.y ?? 0) +\n                startY +\n                scaleRatio * (image.height - originY * 2);\n        if (image.currentX < image.minX) {\n            image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n        }\n        if (image.currentX > image.maxX) {\n            image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n        }\n        if (image.currentY < image.minY) {\n            image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n        }\n        if (image.currentY > image.maxY) {\n            image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n        }\n        // Velocity\n        if (!velocity.prevPositionX)\n            velocity.prevPositionX = image.touchesCurrent.x;\n        if (!velocity.prevPositionY)\n            velocity.prevPositionY = image.touchesCurrent.y;\n        if (!velocity.prevTime)\n            velocity.prevTime = Date.now();\n        velocity.x =\n            (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n        velocity.y =\n            (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n        if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2)\n            velocity.x = 0;\n        if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2)\n            velocity.y = 0;\n        velocity.prevPositionX = image.touchesCurrent.x;\n        velocity.prevPositionY = image.touchesCurrent.y;\n        velocity.prevTime = Date.now();\n        gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n    }\n    function onTouchEnd() {\n        const zoom = swiper.zoom;\n        evCache.length = 0;\n        if (!gesture.imageEl)\n            return;\n        if (!image.isTouched || !image.isMoved) {\n            image.isTouched = false;\n            image.isMoved = false;\n            return;\n        }\n        image.isTouched = false;\n        image.isMoved = false;\n        let momentumDurationX = 300;\n        let momentumDurationY = 300;\n        const velocityX = velocity.x ?? 0;\n        const velocityY = velocity.y ?? 0;\n        const momentumDistanceX = velocityX * momentumDurationX;\n        const newPositionX = image.currentX + momentumDistanceX;\n        const momentumDistanceY = velocityY * momentumDurationY;\n        const newPositionY = image.currentY + momentumDistanceY;\n        // Fix duration\n        if (velocityX !== 0)\n            momentumDurationX = Math.abs((newPositionX - image.currentX) / velocityX);\n        if (velocityY !== 0)\n            momentumDurationY = Math.abs((newPositionY - image.currentY) / velocityY);\n        const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n        image.currentX = newPositionX;\n        image.currentY = newPositionY;\n        // Define if we need image drag\n        const scaledWidth = image.width * zoom.scale;\n        const scaledHeight = image.height * zoom.scale;\n        image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n        image.maxX = -image.minX;\n        image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n        image.maxY = -image.minY;\n        image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n        image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n        gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n        gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n    }\n    function onTransitionEnd() {\n        const zoom = swiper.zoom;\n        if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n            if (gesture.imageEl) {\n                gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n            }\n            if (gesture.imageWrapEl) {\n                gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n            }\n            gesture.slideEl.classList.remove(`${getParams().zoomedSlideClass}`);\n            zoom.scale = 1;\n            currentScale = 1;\n            gesture.slideEl = undefined;\n            gesture.imageEl = undefined;\n            gesture.imageWrapEl = undefined;\n            gesture.originX = 0;\n            gesture.originY = 0;\n        }\n    }\n    function onMouseMove(e) {\n        // Only pan if zoomed in and mouse panning is enabled\n        if (currentScale <= 1 || !gesture.imageWrapEl)\n            return;\n        if (!eventWithinSlide(e) || !eventWithinZoomContainer(e))\n            return;\n        const currentTransform = window.getComputedStyle(gesture.imageWrapEl).transform;\n        const matrix = new window.DOMMatrix(currentTransform);\n        if (!isPanningWithMouse) {\n            isPanningWithMouse = true;\n            mousePanStart.x = e.clientX;\n            mousePanStart.y = e.clientY;\n            image.startX = matrix.e;\n            image.startY = matrix.f;\n            image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n            image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n            gesture.slideWidth = gesture.slideEl.offsetWidth;\n            gesture.slideHeight = gesture.slideEl.offsetHeight;\n            return;\n        }\n        const deltaX = (e.clientX - mousePanStart.x) * mousePanSensitivity;\n        const deltaY = (e.clientY - mousePanStart.y) * mousePanSensitivity;\n        const scaledWidth = image.width * currentScale;\n        const scaledHeight = image.height * currentScale;\n        const slideWidth = gesture.slideWidth;\n        const slideHeight = gesture.slideHeight;\n        const minX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n        const maxX = -minX;\n        const minY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n        const maxY = -minY;\n        const newX = Math.max(Math.min(image.startX + deltaX, maxX), minX);\n        const newY = Math.max(Math.min(image.startY + deltaY, maxY), minY);\n        gesture.imageWrapEl.style.transitionDuration = '0ms';\n        gesture.imageWrapEl.style.transform = `translate3d(${newX}px, ${newY}px, 0)`;\n        mousePanStart.x = e.clientX;\n        mousePanStart.y = e.clientY;\n        image.startX = newX;\n        image.startY = newY;\n        image.currentX = newX;\n        image.currentY = newY;\n    }\n    function zoomIn(e) {\n        const zoom = swiper.zoom;\n        const params = getParams();\n        if (!gesture.slideEl) {\n            if (e && typeof e !== 'number' && 'target' in e && e.target) {\n                gesture.slideEl =\n                    e.target.closest(`.${swiper.params.slideClass}, swiper-slide`) ?? undefined;\n            }\n            if (!gesture.slideEl) {\n                const virtual = swiper.params.virtual;\n                if (virtual && virtual.enabled && swiper.virtual) {\n                    gesture.slideEl =\n                        elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0] ?? undefined;\n                }\n                else {\n                    gesture.slideEl = swiper.slides[swiper.activeIndex];\n                }\n            }\n            let imageEl = gesture.slideEl?.querySelector(`.${params.containerClass}`) ?? null;\n            if (imageEl) {\n                imageEl =\n                    imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0] ?? null;\n            }\n            gesture.imageEl = imageEl ?? undefined;\n            if (imageEl) {\n                gesture.imageWrapEl =\n                    elementParents(imageEl, `.${params.containerClass}`)[0] ??\n                        undefined;\n            }\n            else {\n                gesture.imageWrapEl = undefined;\n            }\n        }\n        if (!gesture.imageEl || !gesture.imageWrapEl || !gesture.slideEl)\n            return;\n        gesture.maxRatio = getMaxRatio();\n        if (swiper.params.cssMode) {\n            swiper.wrapperEl.style.overflow = 'hidden';\n            swiper.wrapperEl.style.touchAction = 'none';\n        }\n        gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n        let touchX;\n        let touchY;\n        let offsetX;\n        let offsetY;\n        let diffX;\n        let diffY;\n        let translateX;\n        let translateY;\n        let imageWidth;\n        let imageHeight;\n        let scaledWidth;\n        let scaledHeight;\n        let translateMinX;\n        let translateMinY;\n        let translateMaxX;\n        let translateMaxY;\n        let slideWidth;\n        let slideHeight;\n        const eventIsPointer = e && typeof e !== 'number';\n        if (typeof image.touchesStart.x === 'undefined' && eventIsPointer) {\n            touchX = e.pageX;\n            touchY = e.pageY;\n        }\n        else {\n            touchX = image.touchesStart.x;\n            touchY = image.touchesStart.y;\n        }\n        const prevScale = currentScale;\n        const forceZoomRatio = typeof e === 'number' ? e : null;\n        if (currentScale === 1 && forceZoomRatio) {\n            touchX = undefined;\n            touchY = undefined;\n            image.touchesStart.x = undefined;\n            image.touchesStart.y = undefined;\n        }\n        const maxRatio = getMaxRatio();\n        zoom.scale = forceZoomRatio || maxRatio;\n        currentScale = forceZoomRatio || maxRatio;\n        if (e && !(currentScale === 1 && forceZoomRatio)) {\n            slideWidth = gesture.slideEl.offsetWidth;\n            slideHeight = gesture.slideEl.offsetHeight;\n            offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n            offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n            diffX = offsetX + slideWidth / 2 - (touchX ?? 0);\n            diffY = offsetY + slideHeight / 2 - (touchY ?? 0);\n            imageWidth = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n            imageHeight = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n            scaledWidth = imageWidth * zoom.scale;\n            scaledHeight = imageHeight * zoom.scale;\n            translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n            translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n            translateMaxX = -translateMinX;\n            translateMaxY = -translateMinY;\n            if (prevScale > 0 &&\n                forceZoomRatio &&\n                typeof image.currentX === 'number' &&\n                typeof image.currentY === 'number') {\n                translateX = (image.currentX * zoom.scale) / prevScale;\n                translateY = (image.currentY * zoom.scale) / prevScale;\n            }\n            else {\n                translateX = diffX * zoom.scale;\n                translateY = diffY * zoom.scale;\n            }\n            if (translateX < translateMinX) {\n                translateX = translateMinX;\n            }\n            if (translateX > translateMaxX) {\n                translateX = translateMaxX;\n            }\n            if (translateY < translateMinY) {\n                translateY = translateMinY;\n            }\n            if (translateY > translateMaxY) {\n                translateY = translateMaxY;\n            }\n        }\n        else {\n            translateX = 0;\n            translateY = 0;\n        }\n        if (forceZoomRatio && zoom.scale === 1) {\n            gesture.originX = 0;\n            gesture.originY = 0;\n        }\n        image.currentX = translateX;\n        image.currentY = translateY;\n        gesture.imageWrapEl.style.transitionDuration = '300ms';\n        gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n        gesture.imageEl.style.transitionDuration = '300ms';\n        gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n    }\n    function zoomOut() {\n        const zoom = swiper.zoom;\n        const params = getParams();\n        if (!gesture.slideEl) {\n            const virtual = swiper.params.virtual;\n            if (virtual && virtual.enabled && swiper.virtual) {\n                gesture.slideEl =\n                    elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0] ?? undefined;\n            }\n            else {\n                gesture.slideEl = swiper.slides[swiper.activeIndex];\n            }\n            let imageEl = gesture.slideEl?.querySelector(`.${params.containerClass}`) ?? null;\n            if (imageEl) {\n                imageEl =\n                    imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0] ?? null;\n            }\n            gesture.imageEl = imageEl ?? undefined;\n            if (imageEl) {\n                gesture.imageWrapEl =\n                    elementParents(imageEl, `.${params.containerClass}`)[0] ??\n                        undefined;\n            }\n            else {\n                gesture.imageWrapEl = undefined;\n            }\n        }\n        if (!gesture.imageEl || !gesture.imageWrapEl || !gesture.slideEl)\n            return;\n        gesture.maxRatio = getMaxRatio();\n        if (swiper.params.cssMode) {\n            swiper.wrapperEl.style.overflow = '';\n            swiper.wrapperEl.style.touchAction = '';\n        }\n        zoom.scale = 1;\n        currentScale = 1;\n        image.currentX = undefined;\n        image.currentY = undefined;\n        image.touchesStart.x = undefined;\n        image.touchesStart.y = undefined;\n        gesture.imageWrapEl.style.transitionDuration = '300ms';\n        gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n        gesture.imageEl.style.transitionDuration = '300ms';\n        gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n        gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n        gesture.slideEl = undefined;\n        gesture.originX = 0;\n        gesture.originY = 0;\n        if (params.panOnMouseMove) {\n            mousePanStart = { x: 0, y: 0 };\n            if (isPanningWithMouse) {\n                isPanningWithMouse = false;\n                image.startX = 0;\n                image.startY = 0;\n            }\n        }\n    }\n    // Toggle Zoom\n    function zoomToggle(e) {\n        const zoom = swiper.zoom;\n        if (zoom.scale && zoom.scale !== 1) {\n            // Zoom Out\n            zoomOut();\n        }\n        else {\n            // Zoom In\n            zoomIn(e);\n        }\n    }\n    function getListeners() {\n        const passiveListener = swiper.params.passiveListeners\n            ? { passive: true, capture: false }\n            : false;\n        const activeListenerWithCapture = swiper.params.passiveListeners\n            ? { passive: false, capture: true }\n            : true;\n        return { passiveListener, activeListenerWithCapture };\n    }\n    // Attach/Detach Events\n    function enable() {\n        const zoom = swiper.zoom;\n        if (zoom.enabled)\n            return;\n        zoom.enabled = true;\n        const { passiveListener, activeListenerWithCapture } = getListeners();\n        // Scale image\n        swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n        swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n        ['pointerup', 'pointercancel', 'pointerout'].forEach((eventName) => {\n            swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n        });\n        // Move image\n        swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n    }\n    function disable() {\n        const zoom = swiper.zoom;\n        if (!zoom.enabled)\n            return;\n        zoom.enabled = false;\n        const { passiveListener, activeListenerWithCapture } = getListeners();\n        // Scale image\n        swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n        swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n        ['pointerup', 'pointercancel', 'pointerout'].forEach((eventName) => {\n            swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n        });\n        // Move image\n        swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n    }\n    on('init', () => {\n        if (getParams().enabled) {\n            enable();\n        }\n    });\n    on('destroy', () => {\n        disable();\n    });\n    on('touchStart', (_s, e) => {\n        if (!swiper.zoom.enabled)\n            return;\n        onTouchStart(e);\n    });\n    on('touchEnd', () => {\n        if (!swiper.zoom.enabled)\n            return;\n        onTouchEnd();\n    });\n    on('doubleTap', (_s, e) => {\n        if (!swiper.animating && getParams().enabled && swiper.zoom.enabled && getParams().toggle) {\n            zoomToggle(e);\n        }\n    });\n    on('transitionEnd', () => {\n        if (swiper.zoom.enabled && getParams().enabled) {\n            onTransitionEnd();\n        }\n    });\n    on('slideChange', () => {\n        if (swiper.zoom.enabled && getParams().enabled && swiper.params.cssMode) {\n            onTransitionEnd();\n        }\n    });\n    Object.assign(swiper.zoom, {\n        enable,\n        disable,\n        in: zoomIn,\n        out: zoomOut,\n        toggle: zoomToggle,\n    });\n};\n\nexport { Zoom as default };\n","const History = ({ swiper, extendParams, on }) => {\n    extendParams({\n        history: {\n            enabled: false,\n            root: '',\n            replaceState: false,\n            key: 'slides',\n            keepQuery: false,\n        },\n    });\n    let initialized = false;\n    let paths = { key: undefined, value: undefined };\n    function getParams() {\n        return swiper.params.history;\n    }\n    const slugify = (text) => {\n        return text\n            .toString()\n            .replace(/\\s+/g, '-')\n            .replace(/[^\\w-]+/g, '')\n            .replace(/--+/g, '-')\n            .replace(/^-+/, '')\n            .replace(/-+$/, '');\n    };\n    const getPathValues = (urlOverride) => {\n        let location;\n        if (urlOverride) {\n            location = new URL(urlOverride);\n        }\n        else {\n            location = window.location;\n        }\n        const pathArray = location.pathname\n            .slice(1)\n            .split('/')\n            .filter((part) => part !== '');\n        const total = pathArray.length;\n        const key = pathArray[total - 2];\n        const value = pathArray[total - 1];\n        return { key, value };\n    };\n    const setHistory = (key, index) => {\n        const params = getParams();\n        if (!initialized || !params.enabled)\n            return;\n        let location;\n        if (swiper.params.url) {\n            location = new URL(swiper.params.url);\n        }\n        else {\n            location = window.location;\n        }\n        const isVirtualEnabled = !!swiper.params.virtual\n            ?.enabled;\n        const slide = swiper.virtual && isVirtualEnabled\n            ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${index}\"]`)\n            : swiper.slides[index];\n        if (!slide)\n            return;\n        let value = slugify(slide.getAttribute('data-history') || '');\n        const root = params.root;\n        if (root.length > 0) {\n            const trimmedRoot = root[root.length - 1] === '/' ? root.slice(0, root.length - 1) : root;\n            value = `${trimmedRoot}/${key ? `${key}/` : ''}${value}`;\n        }\n        else if (!location.pathname.includes(key || '')) {\n            value = `${key ? `${key}/` : ''}${value}`;\n        }\n        if (params.keepQuery) {\n            value += location.search;\n        }\n        const currentState = window.history.state;\n        if (currentState && currentState.value === value) {\n            return;\n        }\n        if (params.replaceState) {\n            window.history.replaceState({ value }, '', value);\n        }\n        else {\n            window.history.pushState({ value }, '', value);\n        }\n    };\n    const scrollToSlide = (speed, value, runCallbacks) => {\n        if (value) {\n            for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n                const slide = swiper.slides[i];\n                const slideHistory = slugify(slide.getAttribute('data-history') || '');\n                if (slideHistory === value) {\n                    const index = swiper.getSlideIndex(slide);\n                    swiper.slideTo(index, speed, runCallbacks);\n                }\n            }\n        }\n        else {\n            swiper.slideTo(0, speed, runCallbacks);\n        }\n    };\n    const setHistoryPopState = () => {\n        paths = getPathValues(swiper.params.url);\n        scrollToSlide(swiper.params.speed, paths.value, false);\n    };\n    const init = () => {\n        const params = swiper.params.history;\n        if (!params)\n            return;\n        if (!window.history || !window.history.pushState) {\n            params.enabled = false;\n            const hashParams = swiper.params.hashNavigation;\n            if (hashParams)\n                hashParams.enabled = true;\n            return;\n        }\n        initialized = true;\n        paths = getPathValues(swiper.params.url);\n        if (!paths.key && !paths.value) {\n            if (!params.replaceState) {\n                window.addEventListener('popstate', setHistoryPopState);\n            }\n            return;\n        }\n        scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n        if (!params.replaceState) {\n            window.addEventListener('popstate', setHistoryPopState);\n        }\n    };\n    const destroy = () => {\n        if (!getParams().replaceState) {\n            window.removeEventListener('popstate', setHistoryPopState);\n        }\n    };\n    on('init', () => {\n        if (getParams().enabled) {\n            init();\n        }\n    });\n    on('destroy', () => {\n        if (getParams().enabled) {\n            destroy();\n        }\n    });\n    on('transitionEnd _freeModeNoMomentumRelease', () => {\n        if (initialized) {\n            setHistory(getParams().key, swiper.activeIndex);\n        }\n    });\n    on('slideChange', () => {\n        if (initialized && swiper.params.cssMode) {\n            setHistory(getParams().key, swiper.activeIndex);\n        }\n    });\n};\n\nexport { History as default };\n","const Autoplay = ({ swiper, extendParams, on, emit, params }) => {\n    swiper.autoplay = {\n        running: false,\n        paused: false,\n        timeLeft: 0,\n    };\n    extendParams({\n        autoplay: {\n            enabled: false,\n            delay: 3000,\n            waitForTransition: true,\n            disableOnInteraction: false,\n            stopOnLastSlide: false,\n            reverseDirection: false,\n            pauseOnMouseEnter: false,\n        },\n    });\n    function getParams() {\n        return swiper.params.autoplay;\n    }\n    // params here is the user-supplied passedParams; extendParams hasn't yet\n    // merged the defaults into swiper.params.autoplay at this point.\n    const initialAutoplayDelay = typeof params.autoplay === 'object' &&\n        params.autoplay &&\n        typeof params.autoplay.delay === 'number'\n        ? params.autoplay.delay\n        : 3000;\n    let timeout;\n    let raf;\n    let autoplayDelayTotal = initialAutoplayDelay;\n    let autoplayDelayCurrent = initialAutoplayDelay;\n    let autoplayTimeLeft = 0;\n    let autoplayStartTime = new Date().getTime();\n    let wasPaused = false;\n    let isTouched = false;\n    let pausedByTouch = false;\n    let touchStartTimeout;\n    let pausedByInteraction = false;\n    let pausedByPointerEnter = false;\n    function onTransitionEnd(e) {\n        if (!swiper || swiper.destroyed || !swiper.wrapperEl)\n            return;\n        if (e.target !== swiper.wrapperEl)\n            return;\n        swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n        const detail = e.detail;\n        if (pausedByPointerEnter || (detail && detail.bySwiperTouchMove)) {\n            return;\n        }\n        resume();\n    }\n    const calcTimeLeft = () => {\n        if (swiper.destroyed || !swiper.autoplay.running)\n            return;\n        if (swiper.autoplay.paused) {\n            wasPaused = true;\n        }\n        else if (wasPaused) {\n            autoplayDelayCurrent = autoplayTimeLeft;\n            wasPaused = false;\n        }\n        const timeLeft = swiper.autoplay.paused\n            ? autoplayTimeLeft\n            : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n        swiper.autoplay.timeLeft = timeLeft;\n        emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n        raf = requestAnimationFrame(() => {\n            calcTimeLeft();\n        });\n    };\n    const getSlideDelay = () => {\n        let activeSlideEl;\n        const virtualEnabled = !!swiper.params.virtual?.enabled;\n        if (swiper.virtual && virtualEnabled) {\n            activeSlideEl = swiper.slides.find((slideEl) => slideEl.classList.contains('swiper-slide-active'));\n        }\n        else {\n            activeSlideEl = swiper.slides[swiper.activeIndex];\n        }\n        if (!activeSlideEl)\n            return undefined;\n        const attr = activeSlideEl.getAttribute('data-swiper-autoplay');\n        if (attr == null)\n            return undefined;\n        return parseInt(attr, 10);\n    };\n    const getTotalDelay = () => {\n        let totalDelay = getParams().delay;\n        const currentSlideDelay = getSlideDelay();\n        if (typeof currentSlideDelay === 'number' &&\n            !Number.isNaN(currentSlideDelay) &&\n            currentSlideDelay > 0) {\n            totalDelay = currentSlideDelay;\n        }\n        return totalDelay;\n    };\n    const run = (delayForce) => {\n        if (swiper.destroyed || !swiper.autoplay.running)\n            return 0;\n        if (raf !== undefined)\n            cancelAnimationFrame(raf);\n        calcTimeLeft();\n        let delay = delayForce;\n        if (typeof delay === 'undefined') {\n            delay = getTotalDelay();\n            autoplayDelayTotal = delay;\n            autoplayDelayCurrent = delay;\n        }\n        autoplayTimeLeft = delay;\n        const speed = swiper.params.speed;\n        const proceed = () => {\n            if (!swiper || swiper.destroyed)\n                return;\n            const autoplayParams = getParams();\n            if (autoplayParams.reverseDirection) {\n                if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n                    swiper.slidePrev(speed, true, true);\n                    emit('autoplay');\n                }\n                else if (!autoplayParams.stopOnLastSlide) {\n                    swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n                    emit('autoplay');\n                }\n            }\n            else {\n                if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n                    swiper.slideNext(speed, true, true);\n                    emit('autoplay');\n                }\n                else if (!autoplayParams.stopOnLastSlide) {\n                    swiper.slideTo(0, speed, true, true);\n                    emit('autoplay');\n                }\n            }\n            if (swiper.params.cssMode) {\n                autoplayStartTime = new Date().getTime();\n                requestAnimationFrame(() => {\n                    run();\n                });\n            }\n        };\n        if (delay > 0) {\n            if (timeout !== undefined)\n                clearTimeout(timeout);\n            timeout = setTimeout(() => {\n                proceed();\n            }, delay);\n        }\n        else {\n            requestAnimationFrame(() => {\n                proceed();\n            });\n        }\n        return delay;\n    };\n    const start = () => {\n        if (swiper.destroyed)\n            return false;\n        autoplayStartTime = new Date().getTime();\n        swiper.autoplay.running = true;\n        run();\n        emit('autoplayStart');\n        return true;\n    };\n    const stop = () => {\n        if (swiper.destroyed)\n            return false;\n        swiper.autoplay.running = false;\n        if (timeout !== undefined)\n            clearTimeout(timeout);\n        if (raf !== undefined)\n            cancelAnimationFrame(raf);\n        emit('autoplayStop');\n        return true;\n    };\n    const pause = (internal, reset) => {\n        if (swiper.destroyed || !swiper.autoplay.running)\n            return;\n        if (timeout !== undefined)\n            clearTimeout(timeout);\n        if (!internal) {\n            pausedByInteraction = true;\n        }\n        const proceed = () => {\n            emit('autoplayPause');\n            if (getParams().waitForTransition) {\n                swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n            }\n            else {\n                resume();\n            }\n        };\n        swiper.autoplay.paused = true;\n        if (reset) {\n            proceed();\n            return;\n        }\n        const delay = autoplayTimeLeft || getParams().delay;\n        autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n        if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop)\n            return;\n        if (autoplayTimeLeft < 0)\n            autoplayTimeLeft = 0;\n        proceed();\n    };\n    const resume = () => {\n        if ((swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) ||\n            swiper.destroyed ||\n            !swiper.autoplay.running)\n            return;\n        autoplayStartTime = new Date().getTime();\n        if (pausedByInteraction) {\n            pausedByInteraction = false;\n            run(autoplayTimeLeft);\n        }\n        else {\n            run();\n        }\n        swiper.autoplay.paused = false;\n        emit('autoplayResume');\n    };\n    const onVisibilityChange = () => {\n        if (swiper.destroyed || !swiper.autoplay.running)\n            return;\n        if (document.visibilityState === 'hidden') {\n            pausedByInteraction = true;\n            pause(true);\n        }\n        if (document.visibilityState === 'visible') {\n            resume();\n        }\n    };\n    const onPointerEnter = (e) => {\n        if (e.pointerType !== 'mouse')\n            return;\n        pausedByInteraction = true;\n        pausedByPointerEnter = true;\n        if (swiper.animating || swiper.autoplay.paused)\n            return;\n        pause(true);\n    };\n    const onPointerLeave = (e) => {\n        if (e.pointerType !== 'mouse')\n            return;\n        pausedByPointerEnter = false;\n        if (swiper.autoplay.paused) {\n            resume();\n        }\n    };\n    const attachMouseEvents = () => {\n        if (getParams().pauseOnMouseEnter) {\n            swiper.el.addEventListener('pointerenter', onPointerEnter);\n            swiper.el.addEventListener('pointerleave', onPointerLeave);\n        }\n    };\n    const detachMouseEvents = () => {\n        if (swiper.el && typeof swiper.el !== 'string') {\n            swiper.el.removeEventListener('pointerenter', onPointerEnter);\n            swiper.el.removeEventListener('pointerleave', onPointerLeave);\n        }\n    };\n    const attachDocumentEvents = () => {\n        document.addEventListener('visibilitychange', onVisibilityChange);\n    };\n    const detachDocumentEvents = () => {\n        document.removeEventListener('visibilitychange', onVisibilityChange);\n    };\n    on('init', () => {\n        if (getParams().enabled) {\n            attachMouseEvents();\n            attachDocumentEvents();\n            start();\n        }\n    });\n    on('destroy', () => {\n        detachMouseEvents();\n        detachDocumentEvents();\n        if (swiper.autoplay.running) {\n            stop();\n        }\n    });\n    on('_freeModeStaticRelease', () => {\n        if (pausedByTouch || pausedByInteraction) {\n            resume();\n        }\n    });\n    on('_freeModeNoMomentumRelease', () => {\n        if (!getParams().disableOnInteraction) {\n            pause(true, true);\n        }\n        else {\n            stop();\n        }\n    });\n    on('beforeTransitionStart', (_s, _speed, internal) => {\n        if (swiper.destroyed || !swiper.autoplay.running)\n            return;\n        if (internal || !getParams().disableOnInteraction) {\n            pause(true, true);\n        }\n        else {\n            stop();\n        }\n    });\n    on('sliderFirstMove', () => {\n        if (swiper.destroyed || !swiper.autoplay.running)\n            return;\n        if (getParams().disableOnInteraction) {\n            stop();\n            return;\n        }\n        isTouched = true;\n        pausedByTouch = false;\n        pausedByInteraction = false;\n        touchStartTimeout = setTimeout(() => {\n            pausedByInteraction = true;\n            pausedByTouch = true;\n            pause(true);\n        }, 200);\n    });\n    on('touchEnd', () => {\n        if (swiper.destroyed || !swiper.autoplay.running || !isTouched)\n            return;\n        if (touchStartTimeout !== undefined)\n            clearTimeout(touchStartTimeout);\n        if (timeout !== undefined)\n            clearTimeout(timeout);\n        if (getParams().disableOnInteraction) {\n            pausedByTouch = false;\n            isTouched = false;\n            return;\n        }\n        if (pausedByTouch && swiper.params.cssMode)\n            resume();\n        pausedByTouch = false;\n        isTouched = false;\n    });\n    on('slideChange', () => {\n        if (swiper.destroyed || !swiper.autoplay.running)\n            return;\n        if (swiper.autoplay.paused) {\n            autoplayTimeLeft = getTotalDelay();\n            autoplayDelayTotal = getTotalDelay();\n        }\n    });\n    Object.assign(swiper.autoplay, {\n        start,\n        stop,\n        pause,\n        resume,\n    });\n};\n\nexport { Autoplay as default };\n","import { r as isHTMLElement, s as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nconst Thumb = ({ swiper, extendParams, on }) => {\n    extendParams({\n        thumbs: {\n            swiper: null,\n            multipleActiveThumbs: true,\n            autoScrollOffset: 0,\n            slideThumbActiveClass: 'swiper-slide-thumb-active',\n            thumbsContainerClass: 'swiper-thumbs',\n        },\n    });\n    let initialized = false;\n    let swiperCreated = false;\n    swiper.thumbs = {\n        swiper: null,\n    };\n    function getParams() {\n        return swiper.params.thumbs;\n    }\n    function isVirtualEnabled() {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed)\n            return false;\n        const virtual = thumbsSwiper.params.virtual;\n        return !!virtual && !!virtual.enabled;\n    }\n    function onThumbClick() {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed)\n            return;\n        const clickedIndex = thumbsSwiper.clickedIndex;\n        const clickedSlide = thumbsSwiper.clickedSlide;\n        const thumbsParams = getParams();\n        if (clickedSlide && clickedSlide.classList.contains(thumbsParams.slideThumbActiveClass))\n            return;\n        if (typeof clickedIndex === 'undefined' || clickedIndex === null)\n            return;\n        let slideToIndex;\n        if (thumbsSwiper.params.loop) {\n            const attr = thumbsSwiper.clickedSlide?.getAttribute('data-swiper-slide-index');\n            slideToIndex = attr == null ? clickedIndex : parseInt(attr, 10);\n        }\n        else {\n            slideToIndex = clickedIndex;\n        }\n        if (swiper.params.loop) {\n            swiper.slideToLoop(slideToIndex);\n        }\n        else {\n            swiper.slideTo(slideToIndex);\n        }\n    }\n    function init() {\n        const thumbsParams = getParams();\n        if (initialized)\n            return false;\n        initialized = true;\n        const SwiperClass = swiper.constructor;\n        if (thumbsParams.swiper instanceof SwiperClass) {\n            if (thumbsParams.swiper.destroyed) {\n                initialized = false;\n                return false;\n            }\n            const thumbsSwiper = thumbsParams.swiper;\n            swiper.thumbs.swiper = thumbsSwiper;\n            Object.assign(thumbsSwiper.originalParams, {\n                watchSlidesProgress: true,\n                slideToClickedSlide: false,\n            });\n            Object.assign(thumbsSwiper.params, {\n                watchSlidesProgress: true,\n                slideToClickedSlide: false,\n            });\n            thumbsSwiper.update();\n        }\n        else if (isObject(thumbsParams.swiper)) {\n            const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n            Object.assign(thumbsSwiperParams, {\n                watchSlidesProgress: true,\n                slideToClickedSlide: false,\n            });\n            swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n            swiperCreated = true;\n        }\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper)\n            return false;\n        thumbsSwiper.el.classList.add(thumbsParams.thumbsContainerClass);\n        thumbsSwiper.on('tap', onThumbClick);\n        if (isVirtualEnabled()) {\n            thumbsSwiper.on('virtualUpdate', () => {\n                update(false, { autoScroll: false });\n            });\n        }\n        return true;\n    }\n    function update(initial, p) {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed)\n            return;\n        // Activate thumbs\n        let thumbsToActivate = 1;\n        const thumbsParams = getParams();\n        const thumbActiveClass = thumbsParams.slideThumbActiveClass;\n        const slidesPerView = swiper.params.slidesPerView;\n        if (typeof slidesPerView === 'number' && slidesPerView > 1 && !swiper.params.centeredSlides) {\n            thumbsToActivate = slidesPerView;\n        }\n        if (!thumbsParams.multipleActiveThumbs) {\n            thumbsToActivate = 1;\n        }\n        thumbsToActivate = Math.floor(thumbsToActivate);\n        thumbsSwiper.slides.forEach((slideEl) => slideEl.classList.remove(thumbActiveClass));\n        if (thumbsSwiper.params.loop || isVirtualEnabled()) {\n            for (let i = 0; i < thumbsToActivate; i += 1) {\n                elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach((slideEl) => {\n                    slideEl.classList.add(thumbActiveClass);\n                });\n            }\n        }\n        else {\n            for (let i = 0; i < thumbsToActivate; i += 1) {\n                const slide = thumbsSwiper.slides[swiper.realIndex + i];\n                if (slide) {\n                    slide.classList.add(thumbActiveClass);\n                }\n            }\n        }\n        if (p?.autoScroll ?? true) {\n            autoScroll(initial ? 0 : undefined);\n        }\n    }\n    function autoScroll(slideSpeed) {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed)\n            return;\n        const thumbsSlidesPerView = thumbsSwiper.params.slidesPerView;\n        const slidesPerView = thumbsSlidesPerView === 'auto'\n            ? thumbsSwiper.slidesPerViewDynamic()\n            : (thumbsSlidesPerView ?? 1);\n        const autoScrollOffset = getParams().autoScrollOffset;\n        const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n        if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n            const currentThumbsIndex = thumbsSwiper.activeIndex;\n            let newThumbsIndex;\n            let direction;\n            if (thumbsSwiper.params.loop) {\n                const newThumbsSlide = thumbsSwiper.slides.find((slideEl) => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`);\n                newThumbsIndex = newThumbsSlide ? thumbsSwiper.slides.indexOf(newThumbsSlide) : -1;\n                direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n            }\n            else {\n                newThumbsIndex = swiper.realIndex;\n                // previousIndex is a DOM index that loopFix shifts when main swiper is looped\n                direction = newThumbsIndex > (swiper.previousRealIndex ?? 0) ? 'next' : 'prev';\n            }\n            if (useOffset) {\n                newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n            }\n            if (thumbsSwiper.visibleSlidesIndexes &&\n                thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n                if (thumbsSwiper.params.centeredSlides) {\n                    if (newThumbsIndex > currentThumbsIndex) {\n                        newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n                    }\n                    else {\n                        newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n                    }\n                }\n                else if (newThumbsIndex > currentThumbsIndex &&\n                    thumbsSwiper.params.slidesPerGroup === 1) ;\n                thumbsSwiper.slideTo(newThumbsIndex, slideSpeed);\n            }\n        }\n    }\n    on('beforeInit', () => {\n        const thumbs = swiper.params.thumbs;\n        if (!thumbs || !thumbs.swiper)\n            return;\n        if (typeof thumbs.swiper === 'string' || isHTMLElement(thumbs.swiper)) {\n            const getThumbsElementAndInit = () => {\n                const thumbsElement = typeof thumbs.swiper === 'string'\n                    ? document.querySelector(thumbs.swiper)\n                    : thumbs.swiper;\n                if (thumbsElement && thumbsElement.swiper) {\n                    thumbs.swiper = thumbsElement.swiper;\n                    init();\n                    update(true);\n                }\n                else if (thumbsElement) {\n                    const eventName = `${swiper.params.eventsPrefix}init`;\n                    const onThumbsSwiper = (e) => {\n                        const detail = e.detail;\n                        thumbs.swiper = detail[0];\n                        thumbsElement.removeEventListener(eventName, onThumbsSwiper);\n                        init();\n                        update(true);\n                        thumbs.swiper.update();\n                        swiper.update();\n                    };\n                    thumbsElement.addEventListener(eventName, onThumbsSwiper);\n                }\n                return thumbsElement;\n            };\n            const watchForThumbsToAppear = () => {\n                if (swiper.destroyed)\n                    return;\n                const thumbsElement = getThumbsElementAndInit();\n                if (!thumbsElement) {\n                    requestAnimationFrame(watchForThumbsToAppear);\n                }\n            };\n            requestAnimationFrame(watchForThumbsToAppear);\n        }\n        else {\n            init();\n            update(true);\n        }\n    });\n    on('slideChange update resize observerUpdate', () => {\n        update();\n    });\n    on('setTransition', (_s, duration) => {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed)\n            return;\n        thumbsSwiper.setTransition(duration);\n    });\n    on('beforeDestroy', () => {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper || thumbsSwiper.destroyed)\n            return;\n        if (swiperCreated) {\n            thumbsSwiper.destroy();\n        }\n    });\n    Object.assign(swiper.thumbs, {\n        init,\n        update,\n    });\n};\n\nexport { Thumb as default };\n","import { v as now, m as elementTransitionEnd } from '../shared/utils.mjs';\n\nconst FreeMode = ({ swiper, extendParams, emit, once }) => {\n    extendParams({\n        freeMode: {\n            enabled: false,\n            momentum: true,\n            momentumRatio: 1,\n            momentumBounce: true,\n            momentumBounceRatio: 1,\n            momentumVelocityRatio: 1,\n            sticky: false,\n            minimumVelocity: 0.02,\n        },\n    });\n    function getParams() {\n        return swiper.params.freeMode;\n    }\n    function onTouchStart() {\n        if (swiper.params.cssMode)\n            return;\n        const translate = swiper.getTranslate();\n        swiper.setTranslate(translate);\n        swiper.setTransition(0);\n        swiper.touchEventsData.velocities.length = 0;\n        swiper.freeMode.onTouchEnd({ currentPos: swiper.rtl ? swiper.translate : -swiper.translate });\n    }\n    function onTouchMove() {\n        if (swiper.params.cssMode)\n            return;\n        const { touchEventsData: data, touches } = swiper;\n        // Velocity\n        if (data.velocities.length === 0) {\n            data.velocities.push({\n                position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n                time: data.touchStartTime ?? now(),\n            });\n        }\n        data.velocities.push({\n            position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n            time: now(),\n        });\n    }\n    function onTouchEnd({ currentPos }) {\n        if (swiper.params.cssMode)\n            return;\n        const { wrapperEl, rtlTranslate: rtl, snapGrid, touchEventsData: data } = swiper;\n        const params = swiper.params;\n        const freeModeParams = getParams();\n        // Time diff\n        const touchEndTime = now();\n        const timeDiff = touchEndTime - (data.touchStartTime ?? touchEndTime);\n        if (currentPos < -swiper.minTranslate()) {\n            swiper.slideTo(swiper.activeIndex);\n            return;\n        }\n        if (currentPos > -swiper.maxTranslate()) {\n            if (swiper.slides.length < snapGrid.length) {\n                swiper.slideTo(snapGrid.length - 1);\n            }\n            else {\n                swiper.slideTo(swiper.slides.length - 1);\n            }\n            return;\n        }\n        if (freeModeParams.momentum) {\n            if (data.velocities.length > 1) {\n                const lastMoveEvent = data.velocities.pop();\n                const velocityEvent = data.velocities.pop();\n                const distance = lastMoveEvent.position - velocityEvent.position;\n                const time = lastMoveEvent.time - velocityEvent.time;\n                swiper.velocity = distance / time;\n                swiper.velocity /= 2;\n                if (Math.abs(swiper.velocity) < freeModeParams.minimumVelocity) {\n                    swiper.velocity = 0;\n                }\n                // this implies that the user stopped moving a finger then released.\n                // There would be no events with distance zero, so the last event is stale.\n                if (time > 150 || now() - lastMoveEvent.time > 300) {\n                    swiper.velocity = 0;\n                }\n            }\n            else {\n                swiper.velocity = 0;\n            }\n            swiper.velocity *= freeModeParams.momentumVelocityRatio;\n            data.velocities.length = 0;\n            let momentumDuration = 1000 * freeModeParams.momentumRatio;\n            const momentumDistance = swiper.velocity * momentumDuration;\n            let newPosition = swiper.translate + momentumDistance;\n            if (rtl)\n                newPosition = -newPosition;\n            let doBounce = false;\n            let afterBouncePosition;\n            const bounceAmount = Math.abs(swiper.velocity) * 20 * freeModeParams.momentumBounceRatio;\n            let needsLoopFix = false;\n            if (newPosition < swiper.maxTranslate()) {\n                if (freeModeParams.momentumBounce) {\n                    if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n                        newPosition = swiper.maxTranslate() - bounceAmount;\n                    }\n                    afterBouncePosition = swiper.maxTranslate();\n                    doBounce = true;\n                    data.allowMomentumBounce = true;\n                }\n                else {\n                    newPosition = swiper.maxTranslate();\n                }\n                if (params.loop && params.centeredSlides)\n                    needsLoopFix = true;\n            }\n            else if (newPosition > swiper.minTranslate()) {\n                if (freeModeParams.momentumBounce) {\n                    if (newPosition - swiper.minTranslate() > bounceAmount) {\n                        newPosition = swiper.minTranslate() + bounceAmount;\n                    }\n                    afterBouncePosition = swiper.minTranslate();\n                    doBounce = true;\n                    data.allowMomentumBounce = true;\n                }\n                else {\n                    newPosition = swiper.minTranslate();\n                }\n                if (params.loop && params.centeredSlides)\n                    needsLoopFix = true;\n            }\n            else if (freeModeParams.sticky) {\n                let nextSlide = 0;\n                for (let j = 0; j < snapGrid.length; j += 1) {\n                    if (snapGrid[j] > -newPosition) {\n                        nextSlide = j;\n                        break;\n                    }\n                }\n                if (Math.abs(snapGrid[nextSlide] - newPosition) <\n                    Math.abs((snapGrid[nextSlide - 1] ?? snapGrid[nextSlide]) - newPosition) ||\n                    swiper.swipeDirection === 'next') {\n                    newPosition = snapGrid[nextSlide];\n                }\n                else {\n                    newPosition = snapGrid[nextSlide - 1];\n                }\n                newPosition = -newPosition;\n            }\n            if (needsLoopFix) {\n                once('transitionEnd', () => {\n                    swiper.loopFix();\n                });\n            }\n            // Fix duration\n            if (swiper.velocity !== 0) {\n                if (rtl) {\n                    momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n                }\n                else {\n                    momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n                }\n                if (freeModeParams.sticky) {\n                    // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n                    // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n                    // It's easy to see this when simulating touch with mouse events. To fix this,\n                    // limit single-slide swipes to the default slide duration. This also has the\n                    // nice side effect of matching slide speed if the user stopped moving before\n                    // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n                    // For faster swipes, also apply limits (albeit higher ones).\n                    const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n                    const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n                    const speed = params.speed;\n                    if (moveDistance < currentSlideSize) {\n                        momentumDuration = speed;\n                    }\n                    else if (moveDistance < 2 * currentSlideSize) {\n                        momentumDuration = speed * 1.5;\n                    }\n                    else {\n                        momentumDuration = speed * 2.5;\n                    }\n                }\n            }\n            else if (freeModeParams.sticky) {\n                swiper.slideToClosest();\n                return;\n            }\n            if (freeModeParams.momentumBounce && doBounce && afterBouncePosition !== undefined) {\n                swiper.updateProgress(afterBouncePosition);\n                swiper.setTransition(momentumDuration);\n                swiper.setTranslate(newPosition);\n                swiper.transitionStart(true, swiper.swipeDirection);\n                swiper.animating = true;\n                elementTransitionEnd(wrapperEl, () => {\n                    if (!swiper || swiper.destroyed || !data.allowMomentumBounce)\n                        return;\n                    emit('momentumBounce');\n                    swiper.setTransition(params.speed);\n                    setTimeout(() => {\n                        swiper.setTranslate(afterBouncePosition);\n                        elementTransitionEnd(wrapperEl, () => {\n                            if (!swiper || swiper.destroyed)\n                                return;\n                            swiper.transitionEnd();\n                        });\n                    }, 0);\n                });\n            }\n            else if (swiper.velocity) {\n                emit('_freeModeNoMomentumRelease');\n                swiper.updateProgress(newPosition);\n                swiper.setTransition(momentumDuration);\n                swiper.setTranslate(newPosition);\n                swiper.transitionStart(true, swiper.swipeDirection);\n                if (!swiper.animating) {\n                    swiper.animating = true;\n                    elementTransitionEnd(wrapperEl, () => {\n                        if (!swiper || swiper.destroyed)\n                            return;\n                        swiper.transitionEnd();\n                    });\n                }\n            }\n            else {\n                swiper.updateProgress(newPosition);\n            }\n            swiper.updateActiveIndex();\n            swiper.updateSlidesClasses();\n        }\n        else if (freeModeParams.sticky) {\n            swiper.slideToClosest();\n            return;\n        }\n        else {\n            emit('_freeModeNoMomentumRelease');\n        }\n        if (!freeModeParams.momentum || timeDiff >= params.longSwipesMs) {\n            emit('_freeModeStaticRelease');\n            swiper.updateProgress();\n            swiper.updateActiveIndex();\n            swiper.updateSlidesClasses();\n        }\n    }\n    swiper.freeMode = {\n        onTouchStart,\n        onTouchMove,\n        onTouchEnd,\n    };\n};\n\nexport { FreeMode as default };\n","const Grid = ({ swiper, extendParams, on }) => {\n    extendParams({\n        grid: {\n            rows: 1,\n            fill: 'column',\n        },\n    });\n    function getParams() {\n        return swiper.params.grid;\n    }\n    let slidesNumberEvenToRows;\n    let slidesPerRow;\n    let numFullColumns;\n    let wasMultiRow;\n    const getSpaceBetween = () => {\n        let spaceBetween = swiper.params.spaceBetween ?? 0;\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        return spaceBetween;\n    };\n    const isVirtualEnabled = () => {\n        const virtualParams = swiper.params.virtual;\n        return (!!swiper.virtual &&\n            typeof virtualParams === 'object' &&\n            virtualParams !== null &&\n            !!virtualParams.enabled);\n    };\n    const initSlides = (slides) => {\n        const { slidesPerView } = swiper.params;\n        const { rows, fill } = getParams();\n        const slidesLength = isVirtualEnabled() ? swiper.virtual.slides.length : slides.length;\n        numFullColumns = Math.floor(slidesLength / rows);\n        if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n            slidesNumberEvenToRows = slidesLength;\n        }\n        else {\n            slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n        }\n        if (slidesPerView !== 'auto' && fill === 'row') {\n            slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, Math.floor(slidesPerView ?? 1) * rows);\n        }\n        slidesPerRow = slidesNumberEvenToRows / rows;\n    };\n    const unsetSlides = () => {\n        if (swiper.slides) {\n            swiper.slides.forEach((slide) => {\n                const gridSlide = slide;\n                if (gridSlide.swiperSlideGridSet) {\n                    slide.style.height = '';\n                    slide.style.setProperty(swiper.getDirectionLabel('margin-top'), '');\n                }\n            });\n        }\n    };\n    const updateSlide = (i, slide, slides) => {\n        const { slidesPerGroup } = swiper.params;\n        const spaceBetween = getSpaceBetween();\n        const { rows, fill } = getParams();\n        const slidesLength = isVirtualEnabled() ? swiper.virtual.slides.length : slides.length;\n        // Set slides order\n        let newSlideOrderIndex;\n        let column;\n        let row;\n        if (fill === 'row' && (slidesPerGroup ?? 1) > 1) {\n            const groupsPer = slidesPerGroup ?? 1;\n            const groupIndex = Math.floor(i / (groupsPer * rows));\n            const slideIndexInGroup = i - rows * groupsPer * groupIndex;\n            const columnsInGroup = groupIndex === 0\n                ? groupsPer\n                : Math.min(Math.ceil((slidesLength - groupIndex * rows * groupsPer) / rows), groupsPer);\n            row = Math.floor(slideIndexInGroup / columnsInGroup);\n            column = slideIndexInGroup - row * columnsInGroup + groupIndex * groupsPer;\n            newSlideOrderIndex = column + (row * slidesNumberEvenToRows) / rows;\n            slide.style.order = String(newSlideOrderIndex);\n        }\n        else if (fill === 'column') {\n            column = Math.floor(i / rows);\n            row = i - column * rows;\n            if (column > numFullColumns || (column === numFullColumns && row === rows - 1)) {\n                row += 1;\n                if (row >= rows) {\n                    row = 0;\n                    column += 1;\n                }\n            }\n        }\n        else {\n            row = Math.floor(i / slidesPerRow);\n            column = i - row * slidesPerRow;\n        }\n        const gridSlide = slide;\n        gridSlide.row = row;\n        gridSlide.column = column;\n        slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`;\n        slide.style.setProperty(swiper.getDirectionLabel('margin-top'), row !== 0 && spaceBetween ? `${spaceBetween}px` : '');\n        gridSlide.swiperSlideGridSet = true;\n    };\n    const updateWrapperSize = (slideSize, snapGrid) => {\n        const { centeredSlides, roundLengths } = swiper.params;\n        const spaceBetween = getSpaceBetween();\n        const { rows } = getParams();\n        swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n        swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n        if (!swiper.params.cssMode) {\n            swiper.wrapperEl.style.setProperty(swiper.getDirectionLabel('width'), `${swiper.virtualSize + spaceBetween}px`);\n        }\n        if (centeredSlides) {\n            const newSlidesGrid = [];\n            for (let i = 0; i < snapGrid.length; i += 1) {\n                let slidesGridItem = snapGrid[i];\n                if (roundLengths)\n                    slidesGridItem = Math.floor(slidesGridItem);\n                if (snapGrid[i] < swiper.virtualSize + snapGrid[0])\n                    newSlidesGrid.push(slidesGridItem);\n            }\n            snapGrid.splice(0, snapGrid.length);\n            snapGrid.push(...newSlidesGrid);\n        }\n    };\n    const onInit = () => {\n        const gridParams = swiper.params.grid;\n        wasMultiRow = !!(gridParams && (gridParams.rows ?? 1) > 1);\n    };\n    const onUpdate = () => {\n        const { params, el } = swiper;\n        const gridParams = params.grid;\n        const isMultiRow = !!(gridParams && (gridParams.rows ?? 1) > 1);\n        if (wasMultiRow && !isMultiRow) {\n            el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n            numFullColumns = 1;\n            swiper.emitContainerClasses();\n        }\n        else if (!wasMultiRow && isMultiRow) {\n            el.classList.add(`${params.containerModifierClass}grid`);\n            if (gridParams.fill === 'column') {\n                el.classList.add(`${params.containerModifierClass}grid-column`);\n            }\n            swiper.emitContainerClasses();\n        }\n        wasMultiRow = isMultiRow;\n    };\n    on('init', onInit);\n    on('update', onUpdate);\n    swiper.grid = {\n        initSlides,\n        unsetSlides,\n        updateSlide,\n        updateWrapperSize,\n    };\n};\n\nexport { Grid as default };\n","import { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { p as getSlideTransformEl } from '../shared/utils.mjs';\n\nconst EffectFade = ({ swiper, extendParams, on }) => {\n    extendParams({\n        fadeEffect: {\n            crossFade: false,\n            mode: 'default',\n        },\n    });\n    // duration of the pending `out-in` transition, passed from setTransition to\n    // setTranslate where the incoming slide is known\n    let outInDuration = 0;\n    function getParams() {\n        return swiper.params.fadeEffect;\n    }\n    function getMode() {\n        const params = getParams();\n        if (params.mode === 'default' && params.crossFade)\n            return 'cross-fade';\n        return params.mode;\n    }\n    const setTranslate = () => {\n        const { slides } = swiper;\n        const params = getParams();\n        const mode = getMode();\n        const outInTransition = mode === 'out-in' && outInDuration > 0;\n        const duration = outInDuration;\n        outInDuration = 0;\n        const targetEls = [];\n        const incomingEls = [];\n        let hasFadingOut = false;\n        for (let i = 0; i < slides.length; i += 1) {\n            const slideEl = slides[i];\n            const offset = slideEl.swiperSlideOffset ?? 0;\n            let tx = -offset;\n            if (!swiper.params.virtualTranslate)\n                tx -= swiper.translate;\n            let ty = 0;\n            if (!swiper.isHorizontal()) {\n                ty = tx;\n                tx = 0;\n            }\n            const slideProgress = slideEl.progress ?? 0;\n            let slideOpacity;\n            if (mode === 'cross-fade') {\n                slideOpacity = Math.max(1 - Math.abs(slideProgress), 0);\n            }\n            else if (mode === 'out-in') {\n                slideOpacity = Math.max(1 - 2 * Math.abs(slideProgress), 0);\n            }\n            else {\n                slideOpacity = 1 + Math.min(Math.max(slideProgress, -1), 0);\n            }\n            const targetEl = effectTarget(params, slideEl);\n            if (outInTransition) {\n                const prevOpacity = parseFloat(targetEl.style.opacity);\n                if (slideOpacity === 0 && prevOpacity > 0)\n                    hasFadingOut = true;\n                if (slideOpacity > 0)\n                    incomingEls.push(targetEl);\n                targetEls.push(targetEl);\n            }\n            targetEl.style.opacity = String(slideOpacity);\n            targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n        }\n        if (outInTransition) {\n            targetEls.forEach((el) => {\n                const delayed = hasFadingOut && incomingEls.includes(el);\n                el.style.transitionDuration = `${duration / 2}ms`;\n                el.style.transitionDelay = delayed ? `${duration / 2}ms` : '0ms';\n            });\n            effectVirtualTransitionEnd({\n                swiper,\n                duration,\n                transformElements: incomingEls,\n                allSlides: true,\n            });\n        }\n    };\n    const setTransition = (duration) => {\n        const mode = getMode();\n        const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));\n        transformElements.forEach((el) => {\n            el.style.transitionDuration = `${duration}ms`;\n            if (mode === 'out-in' && duration === 0)\n                el.style.transitionDelay = '';\n        });\n        if (mode === 'out-in' && duration > 0 && !swiper.params.cssMode) {\n            // sequencing (half durations, delay on the incoming slide) and the\n            // transitionend listener are set in setTranslate, which runs right after\n            // with up-to-date slides progress. Attaching transitionend here to all\n            // slides would end the transition when outgoing slides finish at half time\n            outInDuration = duration;\n            return;\n        }\n        effectVirtualTransitionEnd({ swiper, duration, transformElements, allSlides: true });\n    };\n    effectInit({\n        effect: 'fade',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        overwriteParams: () => ({\n            slidesPerView: 1,\n            slidesPerGroup: 1,\n            watchSlidesProgress: true,\n            spaceBetween: 0,\n            virtualTranslate: !swiper.params.cssMode,\n        }),\n    });\n};\n\nexport { EffectFade as default };\n","import { e as effectInit } from '../shared/effect-init.mjs';\nimport { a as createElement, o as getRotateFix } from '../shared/utils.mjs';\n\nconst EffectCube = ({ swiper, extendParams, on }) => {\n    extendParams({\n        cubeEffect: {\n            slideShadows: true,\n            shadow: true,\n            shadowOffset: 20,\n            shadowScale: 0.94,\n        },\n    });\n    function getParams() {\n        return swiper.params.cubeEffect;\n    }\n    const createSlideShadows = (slideEl, progress, isHorizontal) => {\n        let shadowBefore = isHorizontal\n            ? slideEl.querySelector('.swiper-slide-shadow-left')\n            : slideEl.querySelector('.swiper-slide-shadow-top');\n        let shadowAfter = isHorizontal\n            ? slideEl.querySelector('.swiper-slide-shadow-right')\n            : slideEl.querySelector('.swiper-slide-shadow-bottom');\n        if (!shadowBefore) {\n            shadowBefore = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));\n            slideEl.append(shadowBefore);\n        }\n        if (!shadowAfter) {\n            shadowAfter = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));\n            slideEl.append(shadowAfter);\n        }\n        if (shadowBefore)\n            shadowBefore.style.opacity = String(Math.max(-progress, 0));\n        if (shadowAfter)\n            shadowAfter.style.opacity = String(Math.max(progress, 0));\n    };\n    const recreateShadows = () => {\n        // create new ones\n        const isHorizontal = swiper.isHorizontal();\n        swiper.slides.forEach((slideEl) => {\n            const progress = Math.max(Math.min(slideEl.progress ?? 0, 1), -1);\n            createSlideShadows(slideEl, progress, isHorizontal);\n        });\n    };\n    const setTranslate = () => {\n        const { el, wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize, } = swiper;\n        const r = getRotateFix(swiper);\n        const params = getParams();\n        const isHorizontal = swiper.isHorizontal();\n        const isVirtual = !!(swiper.virtual && swiper.params.virtual?.enabled);\n        let wrapperRotate = 0;\n        let cubeShadowEl = null;\n        if (params.shadow) {\n            if (isHorizontal) {\n                cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');\n                if (!cubeShadowEl) {\n                    cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n                    swiper.wrapperEl.append(cubeShadowEl);\n                }\n                cubeShadowEl.style.height = `${swiperWidth}px`;\n            }\n            else {\n                cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n                if (!cubeShadowEl) {\n                    cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n                    el.append(cubeShadowEl);\n                }\n            }\n        }\n        for (let i = 0; i < slides.length; i += 1) {\n            const slideEl = slides[i];\n            let slideIndex = i;\n            if (isVirtual) {\n                slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index') ?? '0', 10);\n            }\n            let slideAngle = slideIndex * 90;\n            let round = Math.floor(slideAngle / 360);\n            if (rtl) {\n                slideAngle = -slideAngle;\n                round = Math.floor(-slideAngle / 360);\n            }\n            const progress = Math.max(Math.min(slideEl.progress ?? 0, 1), -1);\n            let tx = 0;\n            let ty = 0;\n            let tz = 0;\n            if (slideIndex % 4 === 0) {\n                tx = -round * 4 * swiperSize;\n                tz = 0;\n            }\n            else if ((slideIndex - 1) % 4 === 0) {\n                tx = 0;\n                tz = -round * 4 * swiperSize;\n            }\n            else if ((slideIndex - 2) % 4 === 0) {\n                tx = swiperSize + round * 4 * swiperSize;\n                tz = swiperSize;\n            }\n            else if ((slideIndex - 3) % 4 === 0) {\n                tx = -swiperSize;\n                tz = 3 * swiperSize + swiperSize * 4 * round;\n            }\n            if (rtl) {\n                tx = -tx;\n            }\n            if (!isHorizontal) {\n                ty = tx;\n                tx = 0;\n            }\n            const transform = `rotateX(${r(isHorizontal ? 0 : -slideAngle)}deg) rotateY(${r(isHorizontal ? slideAngle : 0)}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n            if (progress <= 1 && progress > -1) {\n                wrapperRotate = slideIndex * 90 + progress * 90;\n                if (rtl)\n                    wrapperRotate = -slideIndex * 90 - progress * 90;\n            }\n            slideEl.style.transform = transform;\n            if (params.slideShadows) {\n                createSlideShadows(slideEl, progress, isHorizontal);\n            }\n        }\n        wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n        wrapperEl.style.setProperty('-webkit-transform-origin', `50% 50% -${swiperSize / 2}px`);\n        if (params.shadow && cubeShadowEl) {\n            if (isHorizontal) {\n                cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`;\n            }\n            else {\n                const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n                const multiplier = 1.5 -\n                    (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2 +\n                        Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2);\n                const scale1 = params.shadowScale;\n                const scale2 = params.shadowScale / multiplier;\n                const offset = params.shadowOffset;\n                cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`;\n            }\n        }\n        wrapperEl.style.transform = `translate3d(0px,0,0px) rotateX(${r(swiper.isHorizontal() ? 0 : wrapperRotate)}deg) rotateY(${r(swiper.isHorizontal() ? -wrapperRotate : 0)}deg)`;\n        wrapperEl.style.setProperty('--swiper-cube-translate-z', '0px');\n    };\n    const setTransition = (duration) => {\n        const { el, slides } = swiper;\n        slides.forEach((slideEl) => {\n            slideEl.style.transitionDuration = `${duration}ms`;\n            slideEl\n                .querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n                .forEach((subEl) => {\n                subEl.style.transitionDuration = `${duration}ms`;\n            });\n        });\n        if (swiper.params.cubeEffect?.shadow && !swiper.isHorizontal()) {\n            const shadowEl = el.querySelector('.swiper-cube-shadow');\n            if (shadowEl)\n                shadowEl.style.transitionDuration = `${duration}ms`;\n        }\n    };\n    effectInit({\n        effect: 'cube',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        recreateShadows,\n        getEffectParams: () => swiper.params.cubeEffect,\n        perspective: () => true,\n        overwriteParams: () => ({\n            slidesPerView: 1,\n            slidesPerGroup: 1,\n            watchSlidesProgress: true,\n            resistanceRatio: 0,\n            spaceBetween: 0,\n            centeredSlides: false,\n            virtualTranslate: true,\n        }),\n    });\n};\n\nexport { EffectCube as default };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { p as getSlideTransformEl, o as getRotateFix } from '../shared/utils.mjs';\n\nconst EffectCoverflow = ({ swiper, extendParams, on }) => {\n    extendParams({\n        coverflowEffect: {\n            rotate: 50,\n            stretch: 0,\n            depth: 100,\n            scale: 1,\n            modifier: 1,\n            slideShadows: true,\n        },\n    });\n    function getParams() {\n        return swiper.params.coverflowEffect;\n    }\n    const setTranslate = () => {\n        const { width: swiperWidth, height: swiperHeight, slides, slidesSizesGrid } = swiper;\n        const params = getParams();\n        const isHorizontal = swiper.isHorizontal();\n        const transform = swiper.translate;\n        const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n        const rotate = isHorizontal ? params.rotate : -params.rotate;\n        const translate = params.depth;\n        const r = getRotateFix(swiper);\n        // Each slide offset from center\n        for (let i = 0, length = slides.length; i < length; i += 1) {\n            const slideEl = slides[i];\n            const slideSize = slidesSizesGrid[i];\n            const slideOffset = slideEl.swiperSlideOffset ?? 0;\n            const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n            const offsetMultiplier = typeof params.modifier === 'function'\n                ? params.modifier(centerOffset)\n                : centerOffset * params.modifier;\n            let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n            let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n            // var rotateZ = 0\n            let translateZ = -translate * Math.abs(offsetMultiplier);\n            let stretch = typeof params.stretch === 'string' && params.stretch.indexOf('%') !== -1\n                ? (parseFloat(params.stretch) / 100) * slideSize\n                : params.stretch;\n            let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n            let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n            let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n            // Fix for ultra small values\n            if (Math.abs(translateX) < 0.001)\n                translateX = 0;\n            if (Math.abs(translateY) < 0.001)\n                translateY = 0;\n            if (Math.abs(translateZ) < 0.001)\n                translateZ = 0;\n            if (Math.abs(rotateY) < 0.001)\n                rotateY = 0;\n            if (Math.abs(rotateX) < 0.001)\n                rotateX = 0;\n            if (Math.abs(scale) < 0.001)\n                scale = 0;\n            const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${r(rotateX)}deg) rotateY(${r(rotateY)}deg) scale(${scale})`;\n            const targetEl = effectTarget(params, slideEl);\n            targetEl.style.transform = slideTransform;\n            slideEl.style.zIndex = String(-Math.abs(Math.round(offsetMultiplier)) + 1);\n            if (params.slideShadows) {\n                // Set shadows\n                let shadowBeforeEl = isHorizontal\n                    ? slideEl.querySelector('.swiper-slide-shadow-left')\n                    : slideEl.querySelector('.swiper-slide-shadow-top');\n                let shadowAfterEl = isHorizontal\n                    ? slideEl.querySelector('.swiper-slide-shadow-right')\n                    : slideEl.querySelector('.swiper-slide-shadow-bottom');\n                if (!shadowBeforeEl) {\n                    shadowBeforeEl = createShadow('coverflow', slideEl, isHorizontal ? 'left' : 'top');\n                }\n                if (!shadowAfterEl) {\n                    shadowAfterEl = createShadow('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');\n                }\n                if (shadowBeforeEl)\n                    shadowBeforeEl.style.opacity = String(offsetMultiplier > 0 ? offsetMultiplier : 0);\n                if (shadowAfterEl)\n                    shadowAfterEl.style.opacity = String(-offsetMultiplier > 0 ? -offsetMultiplier : 0);\n            }\n        }\n    };\n    const setTransition = (duration) => {\n        const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));\n        transformElements.forEach((el) => {\n            el.style.transitionDuration = `${duration}ms`;\n            el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach((shadowEl) => {\n                shadowEl.style.transitionDuration = `${duration}ms`;\n            });\n        });\n    };\n    effectInit({\n        effect: 'coverflow',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => true,\n        overwriteParams: () => ({\n            watchSlidesProgress: true,\n        }),\n    });\n};\n\nexport { EffectCoverflow as default };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { p as getSlideTransformEl, o as getRotateFix } from '../shared/utils.mjs';\n\nconst EffectCreative = ({ swiper, extendParams, on }) => {\n    extendParams({\n        creativeEffect: {\n            limitProgress: 1,\n            shadowPerProgress: false,\n            progressMultiplier: 1,\n            perspective: true,\n            prev: {\n                translate: [0, 0, 0],\n                rotate: [0, 0, 0],\n                opacity: 1,\n                scale: 1,\n            },\n            next: {\n                translate: [0, 0, 0],\n                rotate: [0, 0, 0],\n                opacity: 1,\n                scale: 1,\n            },\n        },\n    });\n    function getParams() {\n        return swiper.params.creativeEffect;\n    }\n    const getTranslateValue = (value) => {\n        if (typeof value === 'string')\n            return value;\n        return `${value}px`;\n    };\n    const setTranslate = () => {\n        const { slides, wrapperEl, slidesSizesGrid } = swiper;\n        const params = getParams();\n        const { progressMultiplier: multiplier } = params;\n        const isCenteredSlides = swiper.params.centeredSlides;\n        const rotateFix = getRotateFix(swiper);\n        if (isCenteredSlides) {\n            const margin = slidesSizesGrid[0] / 2 - (swiper.params.slidesOffsetBefore ?? 0);\n            wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n        }\n        for (let i = 0; i < slides.length; i += 1) {\n            const slideEl = slides[i];\n            const slideProgress = slideEl.progress ?? 0;\n            const progress = Math.min(Math.max(slideProgress, -params.limitProgress), params.limitProgress);\n            let originalProgress = progress;\n            if (!isCenteredSlides) {\n                originalProgress = Math.min(Math.max(slideEl.originalProgress ?? 0, -params.limitProgress), params.limitProgress);\n            }\n            const offset = slideEl.swiperSlideOffset ?? 0;\n            const t = [\n                swiper.params.cssMode ? -offset - swiper.translate : -offset,\n                0,\n                0,\n            ];\n            const r = [0, 0, 0];\n            let custom = false;\n            if (!swiper.isHorizontal()) {\n                t[1] = t[0];\n                t[0] = 0;\n            }\n            let data = {\n                translate: [0, 0, 0],\n                rotate: [0, 0, 0],\n                scale: 1,\n                opacity: 1,\n            };\n            if (progress < 0) {\n                data = params.next;\n                custom = true;\n            }\n            else if (progress > 0) {\n                data = params.prev;\n                custom = true;\n            }\n            // set translate\n            t.forEach((value, index) => {\n                t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n            });\n            // set rotates\n            r.forEach((_value, index) => {\n                r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n            });\n            slideEl.style.zIndex = String(-Math.abs(Math.round(slideProgress)) + slides.length);\n            const translateString = t.join(', ');\n            const rotateString = `rotateX(${rotateFix(r[0])}deg) rotateY(${rotateFix(r[1])}deg) rotateZ(${rotateFix(r[2])}deg)`;\n            const scaleString = originalProgress < 0\n                ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})`\n                : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n            const opacityString = originalProgress < 0\n                ? 1 + (1 - data.opacity) * originalProgress * multiplier\n                : 1 - (1 - data.opacity) * originalProgress * multiplier;\n            const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n            // Set shadows\n            if ((custom && data.shadow) || !custom) {\n                let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n                if (!shadowEl && data.shadow) {\n                    shadowEl = createShadow('creative', slideEl);\n                }\n                if (shadowEl) {\n                    const shadowOpacity = params.shadowPerProgress\n                        ? progress * (1 / params.limitProgress)\n                        : progress;\n                    shadowEl.style.opacity = String(Math.min(Math.max(Math.abs(shadowOpacity), 0), 1));\n                }\n            }\n            const targetEl = effectTarget(params, slideEl);\n            targetEl.style.transform = transform;\n            targetEl.style.opacity = String(opacityString);\n            if (data.origin) {\n                targetEl.style.transformOrigin = data.origin;\n            }\n        }\n    };\n    const setTransition = (duration) => {\n        const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));\n        transformElements.forEach((el) => {\n            el.style.transitionDuration = `${duration}ms`;\n            el.querySelectorAll('.swiper-slide-shadow').forEach((shadowEl) => {\n                shadowEl.style.transitionDuration = `${duration}ms`;\n            });\n        });\n        effectVirtualTransitionEnd({ swiper, duration, transformElements, allSlides: true });\n    };\n    effectInit({\n        effect: 'creative',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => getParams().perspective,\n        overwriteParams: () => ({\n            watchSlidesProgress: true,\n            virtualTranslate: !swiper.params.cssMode,\n        }),\n    });\n};\n\nexport { EffectCreative as default };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { p as getSlideTransformEl } from '../shared/utils.mjs';\n\nconst EffectCards = ({ swiper, extendParams, on }) => {\n    extendParams({\n        cardsEffect: {\n            slideShadows: true,\n            rotate: true,\n            perSlideRotate: 2,\n            perSlideOffset: 8,\n        },\n    });\n    function getParams() {\n        return swiper.params.cardsEffect;\n    }\n    const setTranslate = () => {\n        const { slides, activeIndex, rtlTranslate: rtl } = swiper;\n        const params = getParams();\n        const { startTranslate, isTouched } = swiper.touchEventsData;\n        const currentTranslate = rtl ? -swiper.translate : swiper.translate;\n        for (let i = 0; i < slides.length; i += 1) {\n            const slideEl = slides[i];\n            const slideProgress = slideEl.progress ?? 0;\n            const progress = Math.min(Math.max(slideProgress, -4), 4);\n            let offset = slideEl.swiperSlideOffset ?? 0;\n            if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n                swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n            }\n            if (swiper.params.centeredSlides && swiper.params.cssMode) {\n                offset -= slides[0].swiperSlideOffset ?? 0;\n            }\n            let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n            let tY = 0;\n            const tZ = -100 * Math.abs(progress);\n            let scale = 1;\n            let rotate = -params.perSlideRotate * progress;\n            let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n            const slideIndex = swiper.virtual && swiper.params.virtual?.enabled ? swiper.virtual.from + i : i;\n            const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) &&\n                progress > 0 &&\n                progress < 1 &&\n                (isTouched || swiper.params.cssMode) &&\n                (currentTranslate ?? 0) < (startTranslate ?? 0);\n            const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) &&\n                progress < 0 &&\n                progress > -1 &&\n                (isTouched || swiper.params.cssMode) &&\n                (currentTranslate ?? 0) > (startTranslate ?? 0);\n            if (isSwipeToNext || isSwipeToPrev) {\n                const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n                rotate += -28 * progress * subProgress;\n                scale += -0.5 * subProgress;\n                tXAdd += 96 * subProgress;\n                tY = `${(params.rotate || swiper.isHorizontal() ? -25 : 0) * subProgress * Math.abs(progress)}%`;\n            }\n            if (progress < 0) {\n                // next\n                tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;\n            }\n            else if (progress > 0) {\n                // prev\n                // wrap the value in parentheses instead of prepending `-` to the string,\n                // as a negative tXAdd would otherwise produce an invalid `--` in calc()\n                tX = `calc(${tX}px ${rtl ? '-' : '+'} (${-tXAdd * Math.abs(progress)}%))`;\n            }\n            else {\n                tX = `${tX}px`;\n            }\n            if (!swiper.isHorizontal()) {\n                const prevY = tY;\n                tY = tX;\n                tX = prevY;\n            }\n            const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n            const transform = `\n        translate3d(${tX}, ${tY}, ${tZ}px)\n        rotateZ(${params.rotate ? (rtl ? -rotate : rotate) : 0}deg)\n        scale(${scaleString})\n      `;\n            if (params.slideShadows) {\n                // Set shadows\n                let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n                if (!shadowEl) {\n                    shadowEl = createShadow('cards', slideEl);\n                }\n                if (shadowEl)\n                    shadowEl.style.opacity = String(Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1));\n            }\n            slideEl.style.zIndex = String(-Math.abs(Math.round(slideProgress)) + slides.length);\n            const targetEl = effectTarget(params, slideEl);\n            targetEl.style.transform = transform;\n        }\n    };\n    const setTransition = (duration) => {\n        const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));\n        transformElements.forEach((el) => {\n            el.style.transitionDuration = `${duration}ms`;\n            el.querySelectorAll('.swiper-slide-shadow').forEach((shadowEl) => {\n                shadowEl.style.transitionDuration = `${duration}ms`;\n            });\n        });\n        effectVirtualTransitionEnd({ swiper, duration, transformElements });\n    };\n    effectInit({\n        effect: 'cards',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => true,\n        overwriteParams: () => ({\n            _loopSwapReset: false,\n            watchSlidesProgress: true,\n            loopAdditionalSlides: getParams().rotate ? 3 : 2,\n            centeredSlides: true,\n            virtualTranslate: !swiper.params.cssMode,\n        }),\n    });\n};\n\nexport { EffectCards as default };\n","import Swiper from 'swiper/bundle'\n\n// swiper 9 以降の loop は、スライドが少ないと複製を作らず、ループが無効になる\n// (slidesPerView: 'auto' では、スライド数 >= 同時表示数 + 複製数 が必要)。\n// 2 枚だけのときも一周できるよう、DOM 側で複製して、必要な枚数を確保する。\nconst MIN_LOOP_SLIDES = 6\n\n// 複製して枚数を確保し、元のスライド数を返す\nconst fillLoopSlides = (container) => {\n  const wrapper = container.querySelector('.swiper-wrapper')\n  const originals = [...wrapper.querySelectorAll(':scope > .swiper-slide')]\n  let total = originals.length\n  while (total < MIN_LOOP_SLIDES) {\n    originals.forEach((slide) => {\n      const clone = slide.cloneNode(true)\n      clone.setAttribute('aria-hidden', 'true')\n      clone.querySelectorAll('[id]').forEach((el) => el.removeAttribute('id'))\n      wrapper.appendChild(clone)\n      total += 1\n    })\n  }\n  return originals.length\n}\n\n// 複製分のバレットは出さず、複製スライド表示中は元のスライドのバレットを有効にする\nconst loopPagination = (originalCount) => ({\n  el: '.swiper-pagination',\n  type: 'bullets',\n  clickable: true,\n  renderBullet: (index, className) => (index < originalCount ? `<span class=\"${className}\"></span>` : ''),\n})\n\nconst syncBulletActive = (swiper, originalCount) => {\n  swiper.on('paginationUpdate', (_s, paginationEl) => {\n    const active = swiper.params.pagination.bulletActiveClass\n    paginationEl.querySelectorAll('.swiper-pagination-bullet').forEach((bullet, i) => {\n      bullet.classList.toggle(active, i === swiper.realIndex % originalCount)\n    })\n  })\n  swiper.pagination.render()\n  swiper.pagination.update()\n}\n\nexport const carousel = () => {\n  document.addEventListener('DOMContentLoaded', () => {\n    const topCarousel = document.querySelector('.m_mvSlider')\n    if (topCarousel) {\n      const swiperListCount = topCarousel.querySelectorAll('.swiper-slide').length\n      if (swiperListCount > 1) {\n        const originalCount = fillLoopSlides(topCarousel)\n        const swiper = new Swiper(topCarousel, {\n          loop: true,\n          slidesPerView: 'auto',\n          centeredSlides: true,\n          speed: 1000,\n          autoplay: {\n            delay: 6000,\n          },\n          pagination: loopPagination(originalCount),\n          navigation: {\n            nextEl: '.swiper-button-next',\n            prevEl: '.swiper-button-prev',\n          },\n          breakpoints: {\n            736: {\n              initialSlide: 1,\n            },\n          },\n        })\n        syncBulletActive(swiper, originalCount)\n      }\n    }\n\n\n    const baseCarousel = document.querySelector('.js_baseSlider')\n    const baseCarouselWrapper = document.querySelector('.m_baseDetailSlider')\n    if (baseCarousel) {\n      const baseSwiperListCount = baseCarousel.querySelectorAll('.swiper-slide').length\n      if (baseSwiperListCount > 1) {\n        const originalCount = fillLoopSlides(baseCarousel)\n        const swiper = new Swiper(baseCarousel, {\n          loop: true,\n          slidesPerView: 'auto',\n          speed: 1000,\n          autoplay: {\n            delay: 6000,\n          },\n          pagination: loopPagination(originalCount),\n          navigation: {\n            nextEl: '.swiper-button-next',\n            prevEl: '.swiper-button-prev',\n          },\n        })\n        syncBulletActive(swiper, originalCount)\n      } else {\n        baseCarouselWrapper.classList.add('is-single')\n      }\n    }\n  })\n}\n","import { slideUp, slideDown, slideToggle } from '../libs/accordion'\n\nexport const accordion = () => {\n  let windowWidth = window.innerWidth\n  const breakPoint = 736\n\n  // グロナビPCサブナビ\n  document.querySelectorAll('.js_pcSubNav > li').forEach(menuItem => {\n    if (windowWidth > breakPoint) {\n      menuItem.addEventListener('mouseenter', function() {\n        const subNav = this.querySelector('.intNav01')\n        if (subNav) {\n          slideDown(subNav, 300)\n        }\n      })\n      menuItem.addEventListener('mouseleave', function() {\n        const subNav = this.querySelector('.intNav01')\n        if (subNav) {\n          slideUp(subNav, 300)\n        }\n      })\n    }\n  })\n\n  // グロナビSPナビ\n  const spMenu = document.querySelector('.js_spMenu')\n  const spNav = document.querySelector('.js_spNav')\n  const spClose = document.querySelector('.js_spClose')\n  if (spMenu) {\n    spMenu.addEventListener('click', function() {\n      if (windowWidth <= breakPoint) {\n        this.classList.toggle('on')\n        slideToggle(spNav, 300)\n      }\n    })\n  }\n  if (spClose) {\n    spClose.addEventListener('click', function() {\n      if (windowWidth <= breakPoint) {\n        spMenu.classList.remove('on')\n        slideUp(spNav, 300)\n      }\n    })\n  }\n\n  // SPヘッダーアコーディオン\n  document.querySelectorAll('.js_spAccordion02').forEach(element => {\n    element.addEventListener('click', function() {\n      if (windowWidth <= breakPoint) {\n        this.classList.toggle('on')\n        this.parentElement.classList.toggle('on')\n        const subNav = this.nextElementSibling\n        slideToggle(subNav, 300)\n      }\n    })\n  })\n\n  // プライバシーテキストトグル\n  document.querySelectorAll('.privacyText .toggleBox').forEach(element => {\n    element.addEventListener('click', function() {\n      this.classList.toggle('open')\n      const privacyText = this.nextElementSibling\n      slideToggle(privacyText, 300)\n    })\n  })\n\n  // SPフッターアコーディオン\n  document.querySelectorAll('.js_spAccordion01').forEach(element => {\n    element.addEventListener('click', function() {\n      if (windowWidth <= breakPoint) {\n        this.classList.toggle('on')\n        const contents = this.nextElementSibling\n        slideToggle(contents, 300)\n      }\n    })\n  })\n}\n","import { accordion } from './user/accordion.js'\nimport { carousel } from './user/carousel.js'\nimport { smoothScroll } from './user/smooth-scroll.js'\nimport { pageTopBtn } from './user/page-top-btn.js'\nimport { tabSwitch } from './user/tab-switch.js'\naccordion()\ncarousel()\nsmoothScroll()\npageTopBtn()\ntabSwitch()\n","export const smoothScroll = () => {\n  const smoothScroll = document.querySelectorAll('a[href^=\"#\"]')\n\n  smoothScroll.forEach((scrollElem) => {\n    scrollElem.addEventListener('click', (e) => {\n      e.preventDefault()\n      let href = scrollElem.getAttribute('href')\n      let target = document.getElementById(href.replace('#', ''))\n      const position = target.getBoundingClientRect().top + window.scrollY\n      window.scrollTo({\n        top: position,\n        behavior: 'smooth',\n      });\n    });\n  })\n}\n","export const pageTopBtn = () => {\n  let windowWidth = window.innerWidth\n  const breakPoint = 736\n  let pageHeight\n  let contentsHeight\n  let footerHeight\n  let scrollCount\n\n  // ページトップへ戻るボタンがフッターで止まる挙動\n  window.addEventListener('load', function() {\n    pageHeight = document.body.offsetHeight\n    if (window.innerWidth > breakPoint) {\n      footerHeight = document.querySelector('.m_footer .grayBg').offsetHeight\n    } else {\n      footerHeight = document.querySelector('.m_footer').offsetHeight\n    }\n    contentsHeight = pageHeight - footerHeight\n  })\n\n  const pagetopBtn = document.querySelector('.pagetopBtn')\n  window.addEventListener('load', updatePagetopBtn)\n  window.addEventListener('scroll', updatePagetopBtn)\n\n  function updatePagetopBtn() {\n    if (window.scrollY > 500) {\n      pagetopBtn.classList.add('is-show')\n    } else {\n      pagetopBtn.classList.remove('is-show')\n    }\n\n    if (windowWidth > breakPoint) {\n      scrollCount = window.scrollY + window.innerHeight - 80\n    } else {\n      scrollCount = window.scrollY + window.innerHeight - 65\n    }\n\n    if (scrollCount > contentsHeight) {\n      pagetopBtn.classList.add('fixed')\n    } else {\n      pagetopBtn.classList.remove('fixed')\n    }\n  }\n}\n","export const tabSwitch = () => {\n  // デイサービスタブ切り替え\n  document.querySelectorAll('.tabDayService li').forEach(tab => {\n    tab.addEventListener('click', function() {\n      const tabClass = this.className\n      document.querySelectorAll('.tabDayService li').forEach(li => {\n        li.classList.remove('current')\n        if (li.className.indexOf(tabClass) !== -1) {\n          li.classList.add('current')\n        }\n      })\n\n      document.querySelectorAll('.tabPanel').forEach(panel => {\n        panel.classList.remove('current')\n        panel.style.display = 'none'\n        if (panel.className.indexOf(tabClass) !== -1) {\n          panel.classList.add('current')\n          panel.style.display = 'block'\n        }\n      })\n    })\n  })\n}\n"],"names":["slideUp","el","duration","style","height","offsetHeight","transitionProperty","transitionDuration","transitionTimingFunction","overflow","paddingTop","paddingBottom","marginTop","marginBottom","setTimeout","display","removeProperty","slideDown","window","getComputedStyle","slideToggle","classesToTokens","classes","trim","split","filter","c","nextTick","callback","delay","now","Date","getTranslate","axis","transform","webkitTransform","matrix","DOMMatrixReadOnly","m41","m42","isObject","o","constructor","Object","prototype","toString","call","slice","isHTMLElement","view","ownerDocument","defaultView","Ctor","HTMLElement","undefined","isNode","node","nodeType","extend","target","sources","to","i","length","nextSource","sourceObj","keysArray","keys","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","sourceVal","__swiper__","setCSSProperty","varName","varValue","setProperty","getSlideTransformEl","slideEl","direct","querySelector","shadowRoot","shadowed","elementChildren","element","selector","children","HTMLSlotElement","push","assignedElements","matches","showWarning","text","console","warn","createElement","tag","document","classList","add","Array","isArray","elementOffset","box","getBoundingClientRect","top","clientTop","left","clientLeft","elementStyle","prop","getPropertyValue","elementIndex","parentNode","indexOf","elementParents","parents","parent","parentElement","elementTransitionEnd","addEventListener","fireCallBack","e","removeEventListener","elementOuterSize","size","includeMargins","parseFloat","makeElementsArray","getRotateFix","swiper","v","Math","abs","browser","need3dFix","setInnerHTML","html","tt","globalThis","trustedTypes","innerHTML","createPolicy","createHTML","s","supportCached","deviceCached","browserCached","getSupport","touch","navigator","maxTouchPoints","getDevice","overrides","userAgent","ios","android","support","platform","ua","device","isAndroid","test","isIPhoneOrIPod","isIPadDirect","isIPadMasquerade","isIPad","os","calcDevice","getBrowser","isSafari","isWebView","uaLower","toLowerCase","includes","calcBrowser","processLazyPreloader","imageEl","destroyed","params","lazyPreload","closest","isElement","slideClass","lazyEl","lazyPreloaderClass","requestAnimationFrame","innerLazy","lazyPreloaderManaged","remove","unlazy","index","slides","removeAttribute","preload","amount","lazyPreloadPrevNext","min","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","from","map","_","forEach","column","slideIndexLastInView","rewind","loop","realIndex","max","isGridEnabled","breakpoints","setBreakpoint","this","initialized","breakpointsBase","breakpointContainer","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","grabCursor","isGrabCursor","wasEnabled","enabled","containerModifierClass","emitContainerClasses","fill","unsetGrabCursor","setGrabCursor","moduleOpt","opts","bpOpts","paramsOpts","wasModuleEnabled","isModuleEnabled","moduleApi","disable","enable","directionChanged","direction","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","assign","allowTouchMove","allowSlideNext","allowSlidePrev","emit","loopDestroy","updateSlides","loopCreate","base","containerEl","currentHeight","innerHeight","clientHeight","points","point","minRatio","substr","value","sort","a","b","parseInt","String","matchMedia","clientWidth","addClasses","classNames","rtl","suffixes","entries","prefix","resultClasses","item","prepareClasses","freeMode","autoHeight","cssMode","centeredSlides","watchSlidesProgress","removeClasses","defaults","init","oneWayMovement","swiperElementNodeName","touchEventsTarget","initialSlide","speed","updateOnWindowResize","resizeObserver","nested","createElements","eventsPrefix","focusableElements","width","preventInteractionOnTransition","url","edgeSwipeDetection","edgeSwipeThreshold","setWrapperSize","virtualTranslate","effect","spaceBetween","slidesPerGroup","slidesPerGroupSkip","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","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","event","once","onceHandler","args","off","__emitterProxy","apply","onAny","eventsAnyListeners","offAny","splice","eventHandler","data","context","unshift","onClick","allowClick","preventDefault","animating","stopPropagation","stopImmediatePropagation","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","onLoad","type","update","onResize","offsetWidth","wrapperEl","snapType","scrollSnapType","snapGrid","isVirtual","virtual","updateSize","updateSlidesClasses","isVirtualLoop","isEnd","isBeginning","slideToLoop","slideTo","slidesLength","onScroll","autoplay","running","paused","clearTimeout","resizeTimeout","resume","checkOverflow","measureSize","isHorizontal","isVertical","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","startEventPath","lastMoveEvent","touches","slidesGrid","pointerType","allowTouchCallbacks","isTouched","isMoved","startMoving","touchEndTime","timeDiff","touchStartTime","pathTree","path","composedPath","updateClickedSlide","lastClickTime","swipeDirection","diff","loopSwapReset","currentTranslate","startTranslate","currentPos","swipeToLast","stopIndex","groupSize","slidesSizesGrid","increment","rewindFirstIndex","rewindLastIndex","ratio","navigation","nextEl","prevEl","onTouchMove","wrapped","targetTouch","isScrolling","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","setTransition","evt","CustomEvent","bubbles","detail","bySwiperTouchMove","dispatchEvent","allowMomentumBounce","getTime","_loopSwapReset","allowThresholdMove","disableParentSwiper","setTranslate","activeSlideIndex","preventEdgeSwipe","innerWidth","onTouchStart","pe","targetTouches","targetEl","isChild","contains","slot","queue","cur","shift","elementIsChildOfSlot","elementIsChildOf","mouseLike","which","button","swipingClassHasValue","eventPath","isTargetShadow","__closestFrom","assignedSlot","getRootNode","root","host","nodeName","shouldPreventDefault","isContentEditable","capture","domMethod","swiperMethod","passive","subscribe","slideRealIndex","initial","slidesEl","initSlides","setAttribute","gridEnabled","recalcSlides","clearBlankSlides","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","append","bothDirections","options","activeSlideIndexParam","byController","byMousewheel","isLocked","__loopFixInProgress__","virtualSlidesLength","virtualSlidesBefore","slidesBefore","snapIndex","resolveOffset","slidesGridStep","offsetSlidesBefore","offsetSlidesAfter","loopedSlides","prependSlidesIndexes","appendSlidesIndexes","cols","floor","isInitialOverflow","getSlideIndex","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","j","slide","slideIndex","__preventObserver__","swiperLoopMoveDOM","prepend","updateSlide","updateSlidesOffset","currentSlideTranslate","controlled","controller","control","loopParams","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","newIndex","targetSlideIndex","targetSlideEl","getSlideIndexByData","needLoopFix","halfView","slideNext","perGroup","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","isFreeMode","prevSnap","prevSnapIndex","snap","prevIndex","prevSlidesInView","lastIndex","slideReset","slideToClosest","currentSnap","clickedSlide","clickedIndex","slideToIndex","getSlideIndexWhenGrid","slideSelector","isGrid","transitionEmit","step","dir","toggleSlideClasses$1","condition","className","toggleSlideClasses","getDirectionPropertyValue","label","getDirectionLabel","wrongRTL","previousSlidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","swiperSize","slidePosition","prevSlideSize","replace","virtualSize","marginLeft","marginRight","unsetSlides","slideSize","shouldResetSlideSize","key","bp","slidesPerViewAutoSlideSize","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","swiperSlideSize","updateWrapperSize","isFractionalSlidesPerView","shouldSnapToSlideEdge","lastAllowedSnapIndex","minVisibleSlides","accumulatedSize","newSlidesGrid","slidesGridItem","virtualLoopCount","slidesAfter","groups","allSlidesSize","slideSizeValue","maxSnap","allSlidesOffset","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","activeSlides","newHeight","getSlideByIndex","visibleSlides","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","originalProgress","multiplier","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","getFilteredSlide","activeSlide","prevSlide","nextSlide","virtualSlides","nextEls","next","nextElementSibling","elementNextAll","prevEls","prev","previousElementSibling","elementPrevAll","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","getActiveIndexByTranslate","firstSlideInColumn","__lastEmittedRealIndex__","pathEl","slideFound","prototypes","x","y","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","transition","transitionDelay","moving","cursor","attachEvents","bind","detachEvents","wasLocked","lastSlideRightEdge","extendedDefaults","Swiper","static","querySelectorAll","swipers","newParams","modules","__modules__","mod","fn","extendParams","swiperParams","passedParams","onHandlers","eventName","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","property","setProgress","current","cls","join","getSlideClasses","updates","exact","spv","breakLoop","complete","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","initialEl","toUpperCase","getWrapperSelector","slideSlots","hostEl","lazyElements","destroy","deleteInstance","cleanStyles","extendDefaults","newDefaults","installModule","use","module","m","defineProperty","get","prototypeRecord","swiperProto","createElementIfNotDefined","checkProps","original","prototypeGroup","group","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","observedWidth","observedHeight","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","createObserver","cancelAnimationFrame","unobserve","observers","attach","ObserverFunc","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","arrowSvg","classesToSelector","getSlidesLength","isVirtualEnabled","gridRows","LinearSpline","binarySearch","maxIndex","minIndex","guess","array","interpolate","x2","i3","i1","addSlide","activeIndexBuffer","baseLength","prependSlide","appendSlide","slidesBuffer","currentSlide","appendElement","tempDOM","prependElement","removeAllSlides","slidesIndexes","removeSlide","indexToRemove","effectInit","overwriteParams","perspective","recreateShadows","getEffectParams","overwriteParamsResult","_s","effectParams","slideShadows","shadowEl","requireUpdateOnVirtual","effectTarget","_effectParams","transformEl","backfaceVisibility","effectVirtualTransitionEnd","transformElements","allSlides","transitionEndTarget","eventTriggered","getSlide","createShadow","suffix","side","shadowClass","shadowContainer","existing","created","cssModeTimeout","getParams","renderSlide","cache","rendered","force","beforeInit","forceActiveIndex","addSlidesBefore","addSlidesAfter","previousFrom","previousTo","previousSlidesGrid","offset","previousOffset","offsetProp","slidesPerViewNumeric","onRendered","virtualParams","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","loopFrom","loopTo","domSlidesAssigned","passedVirtual","arr","numberOfNewSlides","newCache","cachedIndex","cachedEl","cachedElIndex","shiftCacheDownFrom","removedIndex","numericKey","shifted","keyboard","handle","kc","keyCode","charCode","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","noMousewheelClass","lastEventBeforeSnap","lastScrollTime","mouseEntered","recentWheelEvents","handleMouseEnter","handleMouseLeave","animateSlider","newEvent","delta","raw","targetElContainsTarget","rtlFactor","ev","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","freeModeParams","time","sign","ignoreWheelEvents","position","sticky","prevEvent","firstEvent","snapToThreshold","autoplayParams","disableOnInteraction","stop","releaseScroll","getEl","res","toggleEl","disabled","subEl","disabledClass","tagName","lockClass","onPrevClick","onNextClick","initButton","addIcons","tempEl","svgEl","appendChild","destroyButton","hideOnClick","hiddenClass","navigationDisabledClass","targetIsButton","pagination","clickable","isHidden","toggle","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","onBulletClick","moveDirection","els","total","firstIndex","midIndex","dim","classesToRemove","flatMap","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","positionDim","subElIndex","fractionEl","textContent","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","render","paginationHTML","numberOfBullets","isFreeModeEnabled","dragTimeout","dragStartPos","dragSize","trackSize","divider","scrollbar","updateDragPosition","dragEl","newSize","newPos","hide","opacity","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","passiveListener","eventMethod","swiperEl","elTyped","dragClass","draggable","scrollbarDisabledClass","parallax","elementsSelector","setTransform","p","rotate","opacityNum","currentOpacity","scaleNum","elements","_swiper","parallaxEl","attr","parallaxDuration","zoom","limitToOriginalSize","maxRatio","panOnMouseMove","containerClass","zoomedSlideClass","currentScale","isScaling","isPanningWithMouse","mousePanStart","fakeGestureTouched","fakeGestureMoved","evCache","gesture","originX","originY","slideWidth","slideHeight","imageWrapEl","image","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","allowTouchMoveTimeout","getDistanceBetweenTouches","x1","y1","y2","getMaxRatio","naturalWidth","imageMaxRatio","eventWithinSlide","eventWithinZoomContainer","onGestureStart","scaleStart","scrollX","scrollY","getScaleOrigin","onGestureChange","pointerIndex","findIndex","cachedEv","scaleMove","onGestureEnd","isMousePan","onMouseMove","scaledWidth","scaledHeight","scaleRatio","onTransitionEnd","DOMMatrix","f","newX","newY","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","eventIsPointer","prevScale","forceZoomRatio","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","set","momentumDurationX","momentumDurationY","velocityX","velocityY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","removeSpline","spline","inverse","by","controllerParam","controlElement","list","onControllerSwiper","_t","controlledTranslate","SwiperCtor","setControlledTranslate","controllerParams","getInterpolateFunction","isFinite","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","containerRole","itemRoleDescriptionMessage","slideRole","id","scrollOnFocus","wrapperLiveRegion","clicked","focusTargetSlideEl","liveRegion","preventFocusHandler","visibilityChangedTimestamp","notify","message","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","paginationParams","click","hasPagination","hasClickablePagination","initNavEl","_wrapperId","handlePointerDown","handlePointerUp","onVisibilityChange","_e","inertSlides","releaseInertSlides","handleTabKey","hasAttribute","handleFocus","isActive","sourceCapabilities","firesTouchEvents","wrapperId","repeat","round","random","getRandomNumber","live","nav","updateNavigation","updatePagination","history","replaceState","keepQuery","paths","slugify","getPathValues","urlOverride","location","URL","pathArray","pathname","part","setHistory","search","currentState","state","pushState","scrollToSlide","setHistoryPopState","hashParams","hashNavigation","watchState","hash","slideWithHash","matched","onHashChange","newHash","activeSlideEl","setHash","activeSlideHash","historyParams","timeLeft","waitForTransition","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","initialAutoplayDelay","raf","touchStartTimeout","autoplayDelayTotal","autoplayDelayCurrent","autoplayTimeLeft","autoplayStartTime","wasPaused","pausedByTouch","pausedByInteraction","pausedByPointerEnter","calcTimeLeft","getTotalDelay","totalDelay","currentSlideDelay","virtualEnabled","getSlideDelay","run","delayForce","proceed","start","pause","reset","visibilityState","onPointerEnter","onPointerLeave","_speed","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","thumbsSwiper","onThumbClick","thumbsParams","SwiperClass","thumbsSwiperParams","autoScroll","thumbsToActivate","thumbActiveClass","slideSpeed","thumbsSlidesPerView","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","pop","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","getSpaceBetween","gridParams","swiperSlideGridSet","newSlideOrderIndex","row","groupsPer","groupIndex","slideIndexInGroup","columnsInGroup","order","gridSlide","fadeEffect","crossFade","mode","outInDuration","getMode","outInTransition","targetEls","incomingEls","hasFadingOut","tx","ty","slideOpacity","prevOpacity","delayed","cubeEffect","shadow","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","r","wrapperRotate","cubeShadowEl","slideAngle","tz","transformOrigin","shadowAngle","sin","cos","scale1","scale2","flipEffect","limitRotation","rotateFix","rotateY","rotateX","zIndex","coverflowEffect","stretch","depth","modifier","center","centerOffset","offsetMultiplier","translateZ","slideTransform","shadowBeforeEl","shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","isCenteredSlides","margin","custom","_value","translateString","rotateString","scaleString","opacityString","shadowOpacity","origin","cardsEffect","perSlideRotate","perSlideOffset","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","fillLoopSlides","container","wrapper","originals","clone","cloneNode","loopPagination","originalCount","syncBulletActive","paginationEl","active","breakPoint","menuItem","subNav","spMenu","spNav","spClose","privacyText","contents","accordion","topCarousel","baseCarousel","baseCarouselWrapper","scrollElem","href","getElementById","pageHeight","contentsHeight","footerHeight","scrollCount","body","pagetopBtn","updatePagetopBtn","pageTopBtn","tab","tabClass","li","panel"],"sourceRoot":""}