{"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/modules/effect-fade.mjs","../../../node_modules/swiper/shared/effect-init.mjs","../../../node_modules/swiper/shared/effect-virtual-transition-end.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 5.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2025, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: June 27, 2025\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  const noExtend = ['__proto__', 'constructor', 'prototype'];\n  Object.keys(src).filter(key => noExtend.indexOf(key) < 0).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 ? elementToCheck.shadowRoot.children : []), ...(elementToCheck.assignedElements ? 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}\nfunction setInnerHTML(el, html) {\n  if (html === void 0) {\n    html = '';\n  }\n  if (typeof trustedTypes !== 'undefined') {\n    el.innerHTML = trustedTypes.createPolicy('html', {\n      createHTML: s => s\n    }).createHTML(html);\n  } else {\n    el.innerHTML = html;\n  }\n}\n\nexport { setCSSProperty as a, elementParents as b, createElement as c, elementOffset as d, elementChildren as e, now as f, getSlideTransformEl as g, elementOuterSize as h, elementIndex as i, classesToTokens as j, getTranslate as k, elementTransitionEnd as l, makeElementsArray as m, nextTick as n, isObject as o, getRotateFix as p, elementStyle as q, elementNextAll as r, setInnerHTML as s, elementPrevAll as t, animateCSSModeScroll as u, showWarning as v, elementIsChildOf as w, extend as x, deleteProps as y };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { b as elementParents, q as elementStyle, e as elementChildren, a as setCSSProperty, h as elementOuterSize, r as elementNextAll, t as elementPrevAll, k as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, f as now, x as extend, i as elementIndex, y as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n  const window = getWindow();\n  const document = getDocument();\n  return {\n    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n  };\n}\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n  return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_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 && dir === 'reset') {\n    swiper.emit(`slideResetTransition${step}`);\n  } else if (runCallbacks && activeIndex !== previousIndex) {\n    swiper.emit(`slideChangeTransition${step}`);\n    if (dir === 'next') {\n      swiper.emit(`slideNextTransition${step}`);\n    } else {\n      swiper.emit(`slidePrevTransition${step}`);\n    }\n  }\n}\n\nfunction transitionStart(runCallbacks, 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  const browser = getBrowser();\n  const isSafari = browser.isSafari;\n  if (isVirtual && !initial && isSafari && swiper.isElement) {\n    swiper.virtual.update(false, false, slideIndex);\n  }\n  swiper.setTransition(speed);\n  swiper.setTranslate(translate);\n  swiper.updateActiveIndex(slideIndex);\n  swiper.updateSlidesClasses();\n  swiper.emit('beforeTransitionStart', speed, internal);\n  swiper.transitionStart(runCallbacks, direction);\n  if (speed === 0) {\n    swiper.transitionEnd(runCallbacks, direction);\n  } else if (!swiper.animating) {\n    swiper.animating = true;\n    if (!swiper.onSlideToWrapperTransitionEnd) {\n      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n        if (!swiper || swiper.destroyed) return;\n        if (e.target !== this) return;\n        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.onSlideToWrapperTransitionEnd = null;\n        delete swiper.onSlideToWrapperTransitionEnd;\n        swiper.transitionEnd(runCallbacks, direction);\n      };\n    }\n    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n  }\n  return true;\n}\n\nfunction slideToLoop(index, 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  const isFreeMode = params.freeMode && params.freeMode.enabled;\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\n    let prevSnapIndex;\n    snapGrid.forEach((snap, snapIndex) => {\n      if (normalizedTranslate >= snap) {\n        // prevSnap = snap;\n        prevSnapIndex = snapIndex;\n      }\n    });\n    if (typeof prevSnapIndex !== 'undefined') {\n      prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n    }\n  }\n  let prevIndex = 0;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n      prevIndex = Math.max(prevIndex, 0);\n    }\n  }\n  if (params.rewind && swiper.isBeginning) {\n    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n    requestAnimationFrame(() => {\n      swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    });\n    return true;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, 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.getSlideIndexWhenGrid(swiper.clickedIndex);\n  let realIndex;\n  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n  const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      swiper.slideToLoop(realIndex);\n    } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : swiper.slides.length - slidesPerView)) {\n      swiper.loopFix();\n      slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n      nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n\nvar slide = {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex, initial) {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  const initSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    slides.forEach((el, index) => {\n      el.setAttribute('data-swiper-slide-index', index);\n    });\n  };\n  const clearBlankSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n    slides.forEach(el => {\n      el.remove();\n    });\n    if (slides.length > 0) {\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    }\n  };\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n    clearBlankSlides();\n  }\n  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n  const addBlankSlides = amountOfSlides => {\n    for (let i = 0; i < amountOfSlides; i += 1) {\n      const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n      swiper.slidesEl.append(slideEl);\n    }\n  };\n  if (shouldFillGroup) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else if (shouldFillGrid) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else {\n    initSlides();\n  }\n  swiper.loopFix({\n    slideRealIndex,\n    direction: params.centeredSlides ? undefined : 'next',\n    initial\n  });\n}\n\nfunction loopFix(_temp) {\n  let {\n    slideRealIndex,\n    slideTo = true,\n    direction,\n    setTranslate,\n    activeSlideIndex,\n    initial,\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    initialSlide\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 = centeredSlides ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : slidesPerGroup;\n  if (loopedSlides % slidesPerGroup !== 0) {\n    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n  }\n  loopedSlides += params.loopAdditionalSlides;\n  swiper.loopedSlides = loopedSlides;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n    showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n  } else if (gridEnabled && params.grid.fill === 'row') {\n    showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n  }\n  const prependSlidesIndexes = [];\n  const appendSlidesIndexes = [];\n  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n  const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !centeredSlides;\n  let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n  if (typeof activeSlideIndex === 'undefined') {\n    activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass)));\n  } else {\n    activeIndex = activeSlideIndex;\n  }\n  const isNext = direction === 'next' || !direction;\n  const isPrev = direction === 'prev' || !direction;\n  let slidesPrepended = 0;\n  let slidesAppended = 0;\n  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n  const activeColIndexWithShift = activeColIndex + (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    if (isInitialOverflow) {\n      slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n    }\n    for (let i = 0; i < slidesAppended; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        slides.forEach((slide, slideIndex) => {\n          if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n        });\n      } else {\n        appendSlidesIndexes.push(index);\n      }\n    }\n  }\n  swiper.__preventObserver__ = true;\n  requestAnimationFrame(() => {\n    swiper.__preventObserver__ = false;\n  });\n  if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n    if (appendSlidesIndexes.includes(activeSlideIndex)) {\n      appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n    }\n    if (prependSlidesIndexes.includes(activeSlideIndex)) {\n      prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n    }\n  }\n  if (isPrev) {\n    prependSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.prepend(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  if (isNext) {\n    appendSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.append(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  swiper.recalcSlides();\n  if (params.slidesPerView === 'auto') {\n    swiper.updateSlides();\n  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n    swiper.slides.forEach((slide, slideIndex) => {\n      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n    });\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  if (slideTo) {\n    if (prependSlidesIndexes.length > 0 && isPrev) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        if (setTranslate) {\n          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n          swiper.touchEventsData.currentTranslate = swiper.translate;\n        }\n      }\n    } else if (appendSlidesIndexes.length > 0 && isNext) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n      }\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.controller && swiper.controller.control && !byController) {\n    const loopParams = {\n      slideRealIndex,\n      direction,\n      setTranslate,\n      activeSlideIndex,\n      byController: true\n    };\n    if (Array.isArray(swiper.controller.control)) {\n      swiper.controller.control.forEach(c => {\n        if (!c.destroyed && c.params.loop) c.loopFix({\n          ...loopParams,\n          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n        });\n      });\n    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n      swiper.controller.control.loopFix({\n        ...loopParams,\n        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n      });\n    }\n  }\n  swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || !slidesEl || swiper.virtual && swiper.params.virtual.enabled) return;\n  swiper.recalcSlides();\n  const newSlidesOrder = [];\n  swiper.slides.forEach(slideEl => {\n    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n    newSlidesOrder[index] = slideEl;\n  });\n  swiper.slides.forEach(slideEl => {\n    slideEl.removeAttribute('data-swiper-slide-index');\n  });\n  newSlidesOrder.forEach(slideEl => {\n    slidesEl.append(slideEl);\n  });\n  swiper.recalcSlides();\n  swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n  loopCreate,\n  loopFix,\n  loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n  const swiper = this;\n  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nfunction unsetGrabCursor() {\n  const swiper = this;\n  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nvar grabCursor = {\n  setGrabCursor,\n  unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\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 (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {\n      return;\n    } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {\n      return;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n    document.activeElement.blur();\n  }\n  if (document.activeElement) {\n    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  touches.previousX = touches.currentX;\n  touches.previousY = touches.currentY;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n  if (params.oneWayMovement) {\n    diff = Math.abs(diff) * (rtl ? 1 : -1);\n    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n  }\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) {\n    diff = -diff;\n    touchesDiff = -touchesDiff;\n  }\n  const prevTouchesDirection = swiper.touchesDirection;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n  const isLoop = swiper.params.loop && !params.cssMode;\n  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n  if (!data.isMoved) {\n    if (isLoop && allowLoopFix) {\n      swiper.loopFix({\n        direction: swiper.swipeDirection\n      });\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      const evt = new window.CustomEvent('transitionend', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          bySwiperTouchMove: true\n        }\n      });\n      swiper.wrapperEl.dispatchEvent(evt);\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  let loopFixed;\n  new Date().getTime();\n  if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n    Object.assign(touches, {\n      startX: pageX,\n      startY: pageY,\n      currentX: pageX,\n      currentY: pageY,\n      startTranslate: data.currentTranslate\n    });\n    data.loopSwapReset = true;\n    data.startTranslate = data.currentTranslate;\n    return;\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  data.currentTranslate = diff + data.startTranslate;\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if (diff > 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n      swiper.loopFix({\n        direction: 'prev',\n        setTranslate: true,\n        activeSlideIndex: 0\n      });\n    }\n    if (data.currentTranslate > swiper.minTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      }\n    }\n  } else if (diff < 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n      swiper.loopFix({\n        direction: 'next',\n        setTranslate: true,\n        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n      });\n    }\n    if (data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n    }\n  }\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n    swiper.freeMode.onTouchMove();\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n  const swiper = this;\n  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  getSlideIndexWhenGrid(index) {\n    if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n      if (this.params.grid.fill === 'column') {\n        index = Math.floor(index / this.params.grid.rows);\n      } else if (this.params.grid.fill === 'row') {\n        index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n      }\n    }\n    return index;\n  }\n  recalcSlides() {\n    const swiper = this;\n    const {\n      slidesEl,\n      params\n    } = swiper;\n    swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n  }\n  enable() {\n    const swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n    swiper.emit('enable');\n  }\n  disable() {\n    const swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n    swiper.emit('disable');\n  }\n  setProgress(progress, speed) {\n    const swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    const min = swiper.minTranslate();\n    const max = swiper.maxTranslate();\n    const current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  emitContainerClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const cls = swiper.el.className.split(' ').filter(className => {\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', cls.join(' '));\n  }\n  getSlideClasses(slideEl) {\n    const swiper = this;\n    if (swiper.destroyed) return '';\n    return slideEl.className.split(' ').filter(className => {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  }\n  emitSlidesClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const updates = [];\n    swiper.slides.forEach(slideEl => {\n      const classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl,\n        classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  }\n  slidesPerViewDynamic(view, 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(undefined, true);\n    }\n\n    // Attach events\n    swiper.attachEvents();\n    const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n    if (swiper.isElement) {\n      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n    }\n    lazyElements.forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      } else {\n        imageEl.addEventListener('load', e => {\n          processLazyPreloader(swiper, e.target);\n        });\n      }\n    });\n    preload(swiper);\n\n    // Init Flag\n    swiper.initialized = true;\n    preload(swiper);\n\n    // Emit\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  }\n  destroy(deleteInstance, 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 { o 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      if (thumbsParams.swiper.destroyed) {\n        initialized = false;\n        return false;\n      }\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 { 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 _virtualUpdated', () => {\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","import { l 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","/**\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","noExtend","key","indexOf","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","isNode","node","HTMLElement","nodeType","to","arguments","i","nextSource","keysArray","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","isFreeMode","freeMode","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","getSlideIndexWhenGrid","slideSelector","isGrid","getSlideIndex","loopCreate","loopAddBlankSlides","clearBlankSlides","slideBlankClass","recalcSlides","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","byMousewheel","loopedSlides","loopAdditionalSlides","prependSlidesIndexes","appendSlidesIndexes","isInitialOverflow","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","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","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","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","EffectFade","fadeEffect","crossFade","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","slideShadows","shadowEl","effectInit","tx","ty","slideOpacity","opacity","transformElements","transitionEndTarget","eventTriggered","fireCallBack","elementTransitionEnd","effectVirtualTransitionEnd","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]}