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