PageSourceSearch

https://www.helloklarity.com/_next/static/chunks/vendors-6391b56b-e6ed53caf4804b52.js

js helloklarity.com collected 2026-09-25 21:14:09 UTC 175,082 bytes, 5,376 lines download raw bytes

1(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[41386],{
2
3/***/ 265299:
4/***/ (function() {
5
6// extracted by mini-css-extract-plugin
7
8/***/ }),
9
10/***/ 557869:
11/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
12
13"use strict";
14/* unused harmony export c */
15function classesToSelector(classes) {
16  if (classes === void 0) {
17    classes = '';
18  }
19  return `.${classes.trim().replace(/([\.:!+\/])/g, '\\$1') // eslint-disable-line
20  .replace(/ /g, '.')}`;
21}
22
23
24
25
26/***/ }),
27
28/***/ 577701:
29/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
30
31"use strict";
32/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33/* harmony export */   c: function() { return /* binding */ createElementIfNotDefined; }
34/* harmony export */ });
35/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(107185);
36
37
38function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
39  if (swiper.params.createElements) {
40    Object.keys(checkProps).forEach(key => {
41      if (!params[key] && params.auto === true) {
42        let element = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.e)(swiper.el, `.${checkProps[key]}`)[0];
43        if (!element) {
44          element = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('div', checkProps[key]);
45          element.className = checkProps[key];
46          swiper.el.append(element);
47        }
48        params[key] = element;
49        originalParams[key] = element;
50      }
51    });
52  }
53  return params;
54}
55
56
57
58
59/***/ }),
60
61/***/ 239277:
62/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
63
64"use strict";
65/* unused harmony export c */
66/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(107185);
67
68
69function createShadow(suffix, slideEl, side) {
70  const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;
71  const shadowContainer = getSlideTransformEl(slideEl);
72  let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);
73  if (!shadowEl) {
74    shadowEl = createElement('div', shadowClass.split(' '));
75    shadowContainer.append(shadowEl);
76  }
77  return shadowEl;
78}
79
80
81
82
83/***/ }),
84
85/***/ 87740:
86/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
87
88"use strict";
89/* unused harmony export e */
90function effectInit(params) {
91  const {
92    effect,
93    swiper,
94    on,
95    setTranslate,
96    setTransition,
97    overwriteParams,
98    perspective,
99    recreateShadows,
100    getEffectParams
101  } = params;
102  on('beforeInit', () => {
103    if (swiper.params.effect !== effect) return;
104    swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);
105    if (perspective && perspective()) {
106      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
107    }
108    const overwriteParamsResult = overwriteParams ? overwriteParams() : {};
109    Object.assign(swiper.params, overwriteParamsResult);
110    Object.assign(swiper.originalParams, overwriteParamsResult);
111  });
112  on('setTranslate', () => {
113    if (swiper.params.effect !== effect) return;
114    setTranslate();
115  });
116  on('setTransition', (_s, duration) => {
117    if (swiper.params.effect !== effect) return;
118    setTransition(duration);
119  });
120  on('transitionEnd', () => {
121    if (swiper.params.effect !== effect) return;
122    if (recreateShadows) {
123      if (!getEffectParams || !getEffectParams().slideShadows) return;
124      // remove shadows
vendor: 5,436 bytes, lines 125-359
125      swiper.slides.forEach(slideEl => {
126        slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());
127      });
128      // create new one
129      recreateShadows();
130    }
131  });
132  let requireUpdateOnVirtual;
133  on('virtualUpdate', () => {
134    if (swiper.params.effect !== effect) return;
135    if (!swiper.slides.length) {
136      requireUpdateOnVirtual = true;
137    }
138    requestAnimationFrame(() => {
139      if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {
140        setTranslate();
141        requireUpdateOnVirtual = false;
142      }
143    });
144  });
145}
146
147
148
149
150/***/ }),
151
152/***/ 682503:
153/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
154
155"use strict";
156/* unused harmony export e */
157/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(107185);
158
159
160function effectTarget(effectParams, slideEl) {
161  const transformEl = getSlideTransformEl(slideEl);
162  if (transformEl !== slideEl) {
163    transformEl.style.backfaceVisibility = 'hidden';
164    transformEl.style['-webkit-backface-visibility'] = 'hidden';
165  }
166  return transformEl;
167}
168
169
170
171
172/***/ }),
173
174/***/ 979181:
175/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
176
177"use strict";
178/* unused harmony export e */
179/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(107185);
180
181
182function effectVirtualTransitionEnd(_ref) {
183  let {
184    swiper,
185    duration,
186    transformElements,
187    allSlides
188  } = _ref;
189  const {
190    activeIndex
191  } = swiper;
192  const getSlide = el => {
193    if (!el.parentElement) {
194      // assume shadow root
195      const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0];
196      return slide;
197    }
198    return el.parentElement;
199  };
200  if (swiper.params.virtualTranslate && duration !== 0) {
201    let eventTriggered = false;
202    let transitionEndTarget;
203    if (allSlides) {
204      transitionEndTarget = transformElements;
205    } else {
206      transitionEndTarget = transformElements.filter(transformEl => {
207        const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;
208        return swiper.getSlideIndex(el) === activeIndex;
209      });
210    }
211    transitionEndTarget.forEach(el => {
212      elementTransitionEnd(el, () => {
213        if (eventTriggered) return;
214        if (!swiper || swiper.destroyed) return;
215        eventTriggered = true;
216        swiper.animating = false;
217        const evt = new window.CustomEvent('transitionend', {
218          bubbles: true,
219          cancelable: true
220        });
221        swiper.wrapperEl.dispatchEvent(evt);
222      });
223    });
224  }
225}
226
227
228
229
230/***/ }),
231
232/***/ 113433:
233/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
234
235"use strict";
236/* harmony export */ __webpack_require__.d(__webpack_exports__, {
237/* harmony export */   a: function() { return /* binding */ getWindow; },
238/* harmony export */   g: function() { return /* binding */ getDocument; }
239/* harmony export */ });
240/**
241 * SSR Window 4.0.2
242 * Better handling for window object in SSR environment
243 * https://github.com/nolimits4web/ssr-window
244 *
245 * Copyright 2021, Vladimir Kharlampidi
246 *
247 * Licensed under MIT
248 *
249 * Released on: December 13, 2021
250 */
251/* eslint-disable no-param-reassign */
252function isObject(obj) {
253  return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;
254}
255function extend(target, src) {
256  if (target === void 0) {
257    target = {};
258  }
259  if (src === void 0) {
260    src = {};
261  }
262  Object.keys(src).forEach(key => {
263    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
264      extend(target[key], src[key]);
265    }
266  });
267}
268const ssrDocument = {
269  body: {},
270  addEventListener() {},
271  removeEventListener() {},
272  activeElement: {
273    blur() {},
274    nodeName: ''
275  },
276  querySelector() {
277    return null;
278  },
279  querySelectorAll() {
280    return [];
281  },
282  getElementById() {
283    return null;
284  },
285  createEvent() {
286    return {
287      initEvent() {}
288    };
289  },
290  createElement() {
291    return {
292      children: [],
293      childNodes: [],
294      style: {},
295      setAttribute() {},
296      getElementsByTagName() {
297        return [];
298      }
299    };
300  },
301  createElementNS() {
302    return {};
303  },
304  importNode() {
305    return null;
306  },
307  location: {
308    hash: '',
309    host: '',
310    hostname: '',
311    href: '',
312    origin: '',
313    pathname: '',
314    protocol: '',
315    search: ''
316  }
317};
318function getDocument() {
319  const doc = typeof document !== 'undefined' ? document : {};
320  extend(doc, ssrDocument);
321  return doc;
322}
323const ssrWindow = {
324  document: ssrDocument,
325  navigator: {
326    userAgent: ''
327  },
328  location: {
329    hash: '',
330    host: '',
331    hostname: '',
332    href: '',
333    origin: '',
334    pathname: '',
335    protocol: '',
336    search: ''
337  },
338  history: {
339    replaceState() {},
340    pushState() {},
341    go() {},
342    back() {}
343  },
344  CustomEvent: function CustomEvent() {
345    return this;
346  },
347  addEventListener() {},
348  removeEventListener() {},
349  getComputedStyle() {
350    return {
351      getPropertyValue() {
352        return '';
353      }
354    };
355  },
356  Image() {},
357  Date() {},
358  screen: {},
359  setTimeout() {},
vendor: 7,387 bytes, lines 360-568
360  clearTimeout() {},
361  matchMedia() {
362    return {};
363  },
364  requestAnimationFrame(callback) {
365    if (typeof setTimeout === 'undefined') {
366      callback();
367      return null;
368    }
369    return setTimeout(callback, 0);
370  },
371  cancelAnimationFrame(id) {
372    if (typeof setTimeout === 'undefined') {
373      return;
374    }
375    clearTimeout(id);
376  }
377};
378function getWindow() {
379  const win = typeof window !== 'undefined' ? window : {};
380  extend(win, ssrWindow);
381  return win;
382}
383
384
385
386
387/***/ }),
388
389/***/ 107185:
390/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
391
392"use strict";
393/* harmony export */ __webpack_require__.d(__webpack_exports__, {
394/* harmony export */   a: function() { return /* binding */ elementParents; },
395/* harmony export */   c: function() { return /* binding */ createElement; },
396/* harmony export */   d: function() { return /* binding */ now; },
397/* harmony export */   e: function() { return /* binding */ elementChildren; },
398/* harmony export */   f: function() { return /* binding */ elementOuterSize; },
399/* harmony export */   g: function() { return /* binding */ elementIndex; },
400/* harmony export */   i: function() { return /* binding */ getTranslate; },
401/* harmony export */   m: function() { return /* binding */ elementStyle; },
402/* harmony export */   n: function() { return /* binding */ nextTick; },
403/* harmony export */   o: function() { return /* binding */ elementNextAll; },
404/* harmony export */   p: function() { return /* binding */ elementPrevAll; },
405/* harmony export */   q: function() { return /* binding */ animateCSSModeScroll; },
406/* harmony export */   r: function() { return /* binding */ showWarning; },
407/* harmony export */   s: function() { return /* binding */ setCSSProperty; },
408/* harmony export */   t: function() { return /* binding */ extend; },
409/* harmony export */   u: function() { return /* binding */ deleteProps; }
410/* harmony export */ });
411/* unused harmony exports b, h, j, k, l */
412/* harmony import */ var _ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(113433);
413
414
415function classesToTokens(classes) {
416  if (classes === void 0) {
417    classes = '';
418  }
419  return classes.trim().split(' ').filter(c => !!c.trim());
420}
421
422function deleteProps(obj) {
423  const object = obj;
424  Object.keys(object).forEach(key => {
425    try {
426      object[key] = null;
427    } catch (e) {
428      // no getter for object
429    }
430    try {
431      delete object[key];
432    } catch (e) {
433      // something got wrong
434    }
435  });
436}
437function nextTick(callback, delay) {
438  if (delay === void 0) {
439    delay = 0;
440  }
441  return setTimeout(callback, delay);
442}
443function now() {
444  return Date.now();
445}
446function getComputedStyle(el) {
447  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
448  let style;
449  if (window.getComputedStyle) {
450    style = window.getComputedStyle(el, null);
451  }
452  if (!style && el.currentStyle) {
453    style = el.currentStyle;
454  }
455  if (!style) {
456    style = el.style;
457  }
458  return style;
459}
460function getTranslate(el, axis) {
461  if (axis === void 0) {
462    axis = 'x';
463  }
464  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
465  let matrix;
466  let curTransform;
467  let transformMatrix;
468  const curStyle = getComputedStyle(el);
469  if (window.WebKitCSSMatrix) {
470    curTransform = curStyle.transform || curStyle.webkitTransform;
471    if (curTransform.split(',').length > 6) {
472      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');
473    }
474    // Some old versions of Webkit choke when 'none' is passed; pass
475    // empty string instead in this case
476    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
477  } else {
478    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
479    matrix = transformMatrix.toString().split(',');
480  }
481  if (axis === 'x') {
482    // Latest Chrome and webkits Fix
483    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
484    // Crazy IE10 Matrix
485    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
486    // Normal Browsers
487    else curTransform = parseFloat(matrix[4]);
488  }
489  if (axis === 'y') {
490    // Latest Chrome and webkits Fix
491    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
492    // Crazy IE10 Matrix
493    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
494    // Normal Browsers
495    else curTransform = parseFloat(matrix[5]);
496  }
497  return curTransform || 0;
498}
499function isObject(o) {
500  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';
501}
502function isNode(node) {
503  // eslint-disable-next-line
504  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {
505    return node instanceof HTMLElement;
506  }
507  return node && (node.nodeType === 1 || node.nodeType === 11);
508}
509function extend() {
510  const to = Object(arguments.length <= 0 ? undefined : arguments[0]);
511  const noExtend = ['__proto__', 'constructor', 'prototype'];
512  for (let i = 1; i < arguments.length; i += 1) {
513    const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
514    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {
515      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);
516      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
517        const nextKey = keysArray[nextIndex];
518        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
519        if (desc !== undefined && desc.enumerable) {
520          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
521            if (nextSource[nextKey].__swiper__) {
522              to[nextKey] = nextSource[nextKey];
523            } else {
524              extend(to[nextKey], nextSource[nextKey]);
525            }
526          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
527            to[nextKey] = {};
528            if (nextSource[nextKey].__swiper__) {
529              to[nextKey] = nextSource[nextKey];
530            } else {
531              extend(to[nextKey], nextSource[nextKey]);
532            }
533          } else {
534            to[nextKey] = nextSource[nextKey];
535          }
536        }
537      }
538    }
539  }
540  return to;
541}
542function setCSSProperty(el, varName, varValue) {
543  el.style.setProperty(varName, varValue);
544}
545function animateCSSModeScroll(_ref) {
546  let {
547    swiper,
548    targetPosition,
549    side
550  } = _ref;
551  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
552  const startPosition = -swiper.translate;
553  let startTime = null;
554  let time;
555  const duration = swiper.params.speed;
556  swiper.wrapperEl.style.scrollSnapType = 'none';
557  window.cancelAnimationFrame(swiper.cssModeFrameID);
558  const dir = targetPosition > startPosition ? 'next' : 'prev';
559  const isOutOfBound = (current, target) => {
560    return dir === 'next' && current >= target || dir === 'prev' && current <= target;
561  };
562  const animate = () => {
563    time = new Date().getTime();
564    if (startTime === null) {
565      startTime = time;
566    }
567    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
568    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
vendor: 5,255 bytes, lines 569-737
569    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
570    if (isOutOfBound(currentPosition, targetPosition)) {
571      currentPosition = targetPosition;
572    }
573    swiper.wrapperEl.scrollTo({
574      [side]: currentPosition
575    });
576    if (isOutOfBound(currentPosition, targetPosition)) {
577      swiper.wrapperEl.style.overflow = 'hidden';
578      swiper.wrapperEl.style.scrollSnapType = '';
579      setTimeout(() => {
580        swiper.wrapperEl.style.overflow = '';
581        swiper.wrapperEl.scrollTo({
582          [side]: currentPosition
583        });
584      });
585      window.cancelAnimationFrame(swiper.cssModeFrameID);
586      return;
587    }
588    swiper.cssModeFrameID = window.requestAnimationFrame(animate);
589  };
590  animate();
591}
592function getSlideTransformEl(slideEl) {
593  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;
594}
595function elementChildren(element, selector) {
596  if (selector === void 0) {
597    selector = '';
598  }
599  return [...element.children].filter(el => el.matches(selector));
600}
601function showWarning(text) {
602  try {
603    console.warn(text);
604    return;
605  } catch (err) {
606    // err
607  }
608}
609function createElement(tag, classes) {
610  if (classes === void 0) {
611    classes = [];
612  }
613  const el = document.createElement(tag);
614  el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));
615  return el;
616}
617function elementOffset(el) {
618  const window = getWindow();
619  const document = getDocument();
620  const box = el.getBoundingClientRect();
621  const body = document.body;
622  const clientTop = el.clientTop || body.clientTop || 0;
623  const clientLeft = el.clientLeft || body.clientLeft || 0;
624  const scrollTop = el === window ? window.scrollY : el.scrollTop;
625  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;
626  return {
627    top: box.top + scrollTop - clientTop,
628    left: box.left + scrollLeft - clientLeft
629  };
630}
631function elementPrevAll(el, selector) {
632  const prevEls = [];
633  while (el.previousElementSibling) {
634    const prev = el.previousElementSibling; // eslint-disable-line
635    if (selector) {
636      if (prev.matches(selector)) prevEls.push(prev);
637    } else prevEls.push(prev);
638    el = prev;
639  }
640  return prevEls;
641}
642function elementNextAll(el, selector) {
643  const nextEls = [];
644  while (el.nextElementSibling) {
645    const next = el.nextElementSibling; // eslint-disable-line
646    if (selector) {
647      if (next.matches(selector)) nextEls.push(next);
648    } else nextEls.push(next);
649    el = next;
650  }
651  return nextEls;
652}
653function elementStyle(el, prop) {
654  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
655  return window.getComputedStyle(el, null).getPropertyValue(prop);
656}
657function elementIndex(el) {
658  let child = el;
659  let i;
660  if (child) {
661    i = 0;
662    // eslint-disable-next-line
663    while ((child = child.previousSibling) !== null) {
664      if (child.nodeType === 1) i += 1;
665    }
666    return i;
667  }
668  return undefined;
669}
670function elementParents(el, selector) {
671  const parents = []; // eslint-disable-line
672  let parent = el.parentElement; // eslint-disable-line
673  while (parent) {
674    if (selector) {
675      if (parent.matches(selector)) parents.push(parent);
676    } else {
677      parents.push(parent);
678    }
679    parent = parent.parentElement;
680  }
681  return parents;
682}
683function elementTransitionEnd(el, callback) {
684  function fireCallBack(e) {
685    if (e.target !== el) return;
686    callback.call(el, e);
687    el.removeEventListener('transitionend', fireCallBack);
688  }
689  if (callback) {
690    el.addEventListener('transitionend', fireCallBack);
691  }
692}
693function elementOuterSize(el, size, includeMargins) {
694  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
695  if (includeMargins) {
696    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'));
697  }
698  return el.offsetWidth;
699}
700
701
702
703
704/***/ }),
705
706/***/ 202261:
707/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
708
709"use strict";
710
711// EXPORTS
712__webpack_require__.d(__webpack_exports__, {
713  tq: function() { return /* binding */ swiper_react_Swiper; },
714  o5: function() { return /* binding */ SwiperSlide; }
715});
716
717// UNUSED EXPORTS: useSwiper, useSwiperSlide
718
719// EXTERNAL MODULE: ./node_modules/react/index.js
720var react = __webpack_require__(667294);
721// EXTERNAL MODULE: ./node_modules/swiper/shared/ssr-window.esm.mjs
722var ssr_window_esm = __webpack_require__(113433);
723// EXTERNAL MODULE: ./node_modules/swiper/shared/utils.mjs
724var utils = __webpack_require__(107185);
725;// CONCATENATED MODULE: ./node_modules/swiper/shared/swiper-core.mjs
726
727
728
729let support;
730function calcSupport() {
731  const window = (0,ssr_window_esm.a)();
732  const document = (0,ssr_window_esm.g)();
733  return {
734    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,
735    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)
736  };
737}
vendor: 6,465 bytes, lines 738-952
738function getSupport() {
739  if (!support) {
740    support = calcSupport();
741  }
742  return support;
743}
744
745let deviceCached;
746function calcDevice(_temp) {
747  let {
748    userAgent
749  } = _temp === void 0 ? {} : _temp;
750  const support = getSupport();
751  const window = (0,ssr_window_esm.a)();
752  const platform = window.navigator.platform;
753  const ua = userAgent || window.navigator.userAgent;
754  const device = {
755    ios: false,
756    android: false
757  };
758  const screenWidth = window.screen.width;
759  const screenHeight = window.screen.height;
760  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
761  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
762  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
763  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
764  const windows = platform === 'Win32';
765  let macos = platform === 'MacIntel';
766
767  // iPadOs 13 fix
768  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];
769  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {
770    ipad = ua.match(/(Version)\/([\d.]+)/);
771    if (!ipad) ipad = [0, 1, '13_0_0'];
772    macos = false;
773  }
774
775  // Android
776  if (android && !windows) {
777    device.os = 'android';
778    device.android = true;
779  }
780  if (ipad || iphone || ipod) {
781    device.os = 'ios';
782    device.ios = true;
783  }
784
785  // Export object
786  return device;
787}
788function getDevice(overrides) {
789  if (overrides === void 0) {
790    overrides = {};
791  }
792  if (!deviceCached) {
793    deviceCached = calcDevice(overrides);
794  }
795  return deviceCached;
796}
797
798let browser;
799function calcBrowser() {
800  const window = (0,ssr_window_esm.a)();
801  let needPerspectiveFix = false;
802  function isSafari() {
803    const ua = window.navigator.userAgent.toLowerCase();
804    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
805  }
806  if (isSafari()) {
807    const ua = String(window.navigator.userAgent);
808    if (ua.includes('Version/')) {
809      const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));
810      needPerspectiveFix = major < 16 || major === 16 && minor < 2;
811    }
812  }
813  return {
814    isSafari: needPerspectiveFix || isSafari(),
815    needPerspectiveFix,
816    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)
817  };
818}
819function getBrowser() {
820  if (!browser) {
821    browser = calcBrowser();
822  }
823  return browser;
824}
825
826function Resize(_ref) {
827  let {
828    swiper,
829    on,
830    emit
831  } = _ref;
832  const window = (0,ssr_window_esm.a)();
833  let observer = null;
834  let animationFrame = null;
835  const resizeHandler = () => {
836    if (!swiper || swiper.destroyed || !swiper.initialized) return;
837    emit('beforeResize');
838    emit('resize');
839  };
840  const createObserver = () => {
841    if (!swiper || swiper.destroyed || !swiper.initialized) return;
842    observer = new ResizeObserver(entries => {
843      animationFrame = window.requestAnimationFrame(() => {
844        const {
845          width,
846          height
847        } = swiper;
848        let newWidth = width;
849        let newHeight = height;
850        entries.forEach(_ref2 => {
851          let {
852            contentBoxSize,
853            contentRect,
854            target
855          } = _ref2;
856          if (target && target !== swiper.el) return;
857          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;
858          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;
859        });
860        if (newWidth !== width || newHeight !== height) {
861          resizeHandler();
862        }
863      });
864    });
865    observer.observe(swiper.el);
866  };
867  const removeObserver = () => {
868    if (animationFrame) {
869      window.cancelAnimationFrame(animationFrame);
870    }
871    if (observer && observer.unobserve && swiper.el) {
872      observer.unobserve(swiper.el);
873      observer = null;
874    }
875  };
876  const orientationChangeHandler = () => {
877    if (!swiper || swiper.destroyed || !swiper.initialized) return;
878    emit('orientationchange');
879  };
880  on('init', () => {
881    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {
882      createObserver();
883      return;
884    }
885    window.addEventListener('resize', resizeHandler);
886    window.addEventListener('orientationchange', orientationChangeHandler);
887  });
888  on('destroy', () => {
889    removeObserver();
890    window.removeEventListener('resize', resizeHandler);
891    window.removeEventListener('orientationchange', orientationChangeHandler);
892  });
893}
894
895function Observer(_ref) {
896  let {
897    swiper,
898    extendParams,
899    on,
900    emit
901  } = _ref;
902  const observers = [];
903  const window = (0,ssr_window_esm.a)();
904  const attach = function (target, options) {
905    if (options === void 0) {
906      options = {};
907    }
908    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
909    const observer = new ObserverFunc(mutations => {
910      // The observerUpdate event should only be triggered
911      // once despite the number of mutations.  Additional
912      // triggers are redundant and are very costly
913      if (swiper.__preventObserver__) return;
914      if (mutations.length === 1) {
915        emit('observerUpdate', mutations[0]);
916        return;
917      }
918      const observerUpdate = function observerUpdate() {
919        emit('observerUpdate', mutations[0]);
920      };
921      if (window.requestAnimationFrame) {
922        window.requestAnimationFrame(observerUpdate);
923      } else {
924        window.setTimeout(observerUpdate, 0);
925      }
926    });
927    observer.observe(target, {
928      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
929      childList: typeof options.childList === 'undefined' ? true : options.childList,
930      characterData: typeof options.characterData === 'undefined' ? true : options.characterData
931    });
932    observers.push(observer);
933  };
934  const init = () => {
935    if (!swiper.params.observer) return;
936    if (swiper.params.observeParents) {
937      const containerParents = (0,utils.a)(swiper.hostEl);
938      for (let i = 0; i < containerParents.length; i += 1) {
939        attach(containerParents[i]);
940      }
941    }
942    // Observe container
943    attach(swiper.hostEl, {
944      childList: swiper.params.observeSlideChildren
945    });
946
947    // Observe wrapper
948    attach(swiper.wrapperEl, {
949      attributes: false
950    });
951  };
952  const destroy = () => {
vendor: 5,640 bytes, lines 953-1124
953    observers.forEach(observer => {
954      observer.disconnect();
955    });
956    observers.splice(0, observers.length);
957  };
958  extendParams({
959    observer: false,
960    observeParents: false,
961    observeSlideChildren: false
962  });
963  on('init', init);
964  on('destroy', destroy);
965}
966
967/* eslint-disable no-underscore-dangle */
968
969var eventsEmitter = {
970  on(events, handler, priority) {
971    const self = this;
972    if (!self.eventsListeners || self.destroyed) return self;
973    if (typeof handler !== 'function') return self;
974    const method = priority ? 'unshift' : 'push';
975    events.split(' ').forEach(event => {
976      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
977      self.eventsListeners[event][method](handler);
978    });
979    return self;
980  },
981  once(events, handler, priority) {
982    const self = this;
983    if (!self.eventsListeners || self.destroyed) return self;
984    if (typeof handler !== 'function') return self;
985    function onceHandler() {
986      self.off(events, onceHandler);
987      if (onceHandler.__emitterProxy) {
988        delete onceHandler.__emitterProxy;
989      }
990      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
991        args[_key] = arguments[_key];
992      }
993      handler.apply(self, args);
994    }
995    onceHandler.__emitterProxy = handler;
996    return self.on(events, onceHandler, priority);
997  },
998  onAny(handler, priority) {
999    const self = this;
1000    if (!self.eventsListeners || self.destroyed) return self;
1001    if (typeof handler !== 'function') return self;
1002    const method = priority ? 'unshift' : 'push';
1003    if (self.eventsAnyListeners.indexOf(handler) < 0) {
1004      self.eventsAnyListeners[method](handler);
1005    }
1006    return self;
1007  },
1008  offAny(handler) {
1009    const self = this;
1010    if (!self.eventsListeners || self.destroyed) return self;
1011    if (!self.eventsAnyListeners) return self;
1012    const index = self.eventsAnyListeners.indexOf(handler);
1013    if (index >= 0) {
1014      self.eventsAnyListeners.splice(index, 1);
1015    }
1016    return self;
1017  },
1018  off(events, handler) {
1019    const self = this;
1020    if (!self.eventsListeners || self.destroyed) return self;
1021    if (!self.eventsListeners) return self;
1022    events.split(' ').forEach(event => {
1023      if (typeof handler === 'undefined') {
1024        self.eventsListeners[event] = [];
1025      } else if (self.eventsListeners[event]) {
1026        self.eventsListeners[event].forEach((eventHandler, index) => {
1027          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
1028            self.eventsListeners[event].splice(index, 1);
1029          }
1030        });
1031      }
1032    });
1033    return self;
1034  },
1035  emit() {
1036    const self = this;
1037    if (!self.eventsListeners || self.destroyed) return self;
1038    if (!self.eventsListeners) return self;
1039    let events;
1040    let data;
1041    let context;
1042    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1043      args[_key2] = arguments[_key2];
1044    }
1045    if (typeof args[0] === 'string' || Array.isArray(args[0])) {
1046      events = args[0];
1047      data = args.slice(1, args.length);
1048      context = self;
1049    } else {
1050      events = args[0].events;
1051      data = args[0].data;
1052      context = args[0].context || self;
1053    }
1054    data.unshift(context);
1055    const eventsArray = Array.isArray(events) ? events : events.split(' ');
1056    eventsArray.forEach(event => {
1057      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
1058        self.eventsAnyListeners.forEach(eventHandler => {
1059          eventHandler.apply(context, [event, ...data]);
1060        });
1061      }
1062      if (self.eventsListeners && self.eventsListeners[event]) {
1063        self.eventsListeners[event].forEach(eventHandler => {
1064          eventHandler.apply(context, data);
1065        });
1066      }
1067    });
1068    return self;
1069  }
1070};
1071
1072function updateSize() {
1073  const swiper = this;
1074  let width;
1075  let height;
1076  const el = swiper.el;
1077  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {
1078    width = swiper.params.width;
1079  } else {
1080    width = el.clientWidth;
1081  }
1082  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {
1083    height = swiper.params.height;
1084  } else {
1085    height = el.clientHeight;
1086  }
1087  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
1088    return;
1089  }
1090
1091  // Subtract paddings
1092  width = width - parseInt((0,utils.m)(el, 'padding-left') || 0, 10) - parseInt((0,utils.m)(el, 'padding-right') || 0, 10);
1093  height = height - parseInt((0,utils.m)(el, 'padding-top') || 0, 10) - parseInt((0,utils.m)(el, 'padding-bottom') || 0, 10);
1094  if (Number.isNaN(width)) width = 0;
1095  if (Number.isNaN(height)) height = 0;
1096  Object.assign(swiper, {
1097    width,
1098    height,
1099    size: swiper.isHorizontal() ? width : height
1100  });
1101}
1102
1103function updateSlides() {
1104  const swiper = this;
1105  function getDirectionPropertyValue(node, label) {
1106    return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);
1107  }
1108  const params = swiper.params;
1109  const {
1110    wrapperEl,
1111    slidesEl,
1112    size: swiperSize,
1113    rtlTranslate: rtl,
1114    wrongRTL
1115  } = swiper;
1116  const isVirtual = swiper.virtual && params.virtual.enabled;
1117  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
1118  const slides = (0,utils.e)(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);
1119  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
1120  let snapGrid = [];
1121  const slidesGrid = [];
1122  const slidesSizesGrid = [];
1123  let offsetBefore = params.slidesOffsetBefore;
1124  if (typeof offsetBefore === 'function') {
vendor: 2,615 bytes, lines 1125-1198
1125    offsetBefore = params.slidesOffsetBefore.call(swiper);
1126  }
1127  let offsetAfter = params.slidesOffsetAfter;
1128  if (typeof offsetAfter === 'function') {
1129    offsetAfter = params.slidesOffsetAfter.call(swiper);
1130  }
1131  const previousSnapGridLength = swiper.snapGrid.length;
1132  const previousSlidesGridLength = swiper.slidesGrid.length;
1133  let spaceBetween = params.spaceBetween;
1134  let slidePosition = -offsetBefore;
1135  let prevSlideSize = 0;
1136  let index = 0;
1137  if (typeof swiperSize === 'undefined') {
1138    return;
1139  }
1140  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
1141    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
1142  } else if (typeof spaceBetween === 'string') {
1143    spaceBetween = parseFloat(spaceBetween);
1144  }
1145  swiper.virtualSize = -spaceBetween;
1146
1147  // reset margins
1148  slides.forEach(slideEl => {
1149    if (rtl) {
1150      slideEl.style.marginLeft = '';
1151    } else {
1152      slideEl.style.marginRight = '';
1153    }
1154    slideEl.style.marginBottom = '';
1155    slideEl.style.marginTop = '';
1156  });
1157
1158  // reset cssMode offsets
1159  if (params.centeredSlides && params.cssMode) {
1160    (0,utils.s)(wrapperEl, '--swiper-centered-offset-before', '');
1161    (0,utils.s)(wrapperEl, '--swiper-centered-offset-after', '');
1162  }
1163  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
1164  if (gridEnabled) {
1165    swiper.grid.initSlides(slides);
1166  } else if (swiper.grid) {
1167    swiper.grid.unsetSlides();
1168  }
1169
1170  // Calc slides
1171  let slideSize;
1172  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {
1173    return typeof params.breakpoints[key].slidesPerView !== 'undefined';
1174  }).length > 0;
1175  for (let i = 0; i < slidesLength; i += 1) {
1176    slideSize = 0;
1177    let slide;
1178    if (slides[i]) slide = slides[i];
1179    if (gridEnabled) {
1180      swiper.grid.updateSlide(i, slide, slides);
1181    }
1182    if (slides[i] && (0,utils.m)(slide, 'display') === 'none') continue; // eslint-disable-line
1183
1184    if (params.slidesPerView === 'auto') {
1185      if (shouldResetSlideSize) {
1186        slides[i].style[swiper.getDirectionLabel('width')] = ``;
1187      }
1188      const slideStyles = getComputedStyle(slide);
1189      const currentTransform = slide.style.transform;
1190      const currentWebKitTransform = slide.style.webkitTransform;
1191      if (currentTransform) {
1192        slide.style.transform = 'none';
1193      }
1194      if (currentWebKitTransform) {
1195        slide.style.webkitTransform = 'none';
1196      }
1197      if (params.roundLengths) {
1198        slideSize = swiper.isHorizontal() ? (0,utils.f)(slide, 'width', true) : (0,utils.f)
vendor: 5,071 bytes, lines 1198-1315
1198(slide, 'height', true);
1199      } else {
1200        // eslint-disable-next-line
1201        const width = getDirectionPropertyValue(slideStyles, 'width');
1202        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');
1203        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');
1204        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');
1205        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');
1206        const boxSizing = slideStyles.getPropertyValue('box-sizing');
1207        if (boxSizing && boxSizing === 'border-box') {
1208          slideSize = width + marginLeft + marginRight;
1209        } else {
1210          const {
1211            clientWidth,
1212            offsetWidth
1213          } = slide;
1214          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
1215        }
1216      }
1217      if (currentTransform) {
1218        slide.style.transform = currentTransform;
1219      }
1220      if (currentWebKitTransform) {
1221        slide.style.webkitTransform = currentWebKitTransform;
1222      }
1223      if (params.roundLengths) slideSize = Math.floor(slideSize);
1224    } else {
1225      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
1226      if (params.roundLengths) slideSize = Math.floor(slideSize);
1227      if (slides[i]) {
1228        slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;
1229      }
1230    }
1231    if (slides[i]) {
1232      slides[i].swiperSlideSize = slideSize;
1233    }
1234    slidesSizesGrid.push(slideSize);
1235    if (params.centeredSlides) {
1236      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
1237      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
1238      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
1239      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
1240      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
1241      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
1242      slidesGrid.push(slidePosition);
1243    } else {
1244      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
1245      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
1246      slidesGrid.push(slidePosition);
1247      slidePosition = slidePosition + slideSize + spaceBetween;
1248    }
1249    swiper.virtualSize += slideSize + spaceBetween;
1250    prevSlideSize = slideSize;
1251    index += 1;
1252  }
1253  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
1254  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
1255    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;
1256  }
1257  if (params.setWrapperSize) {
1258    wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;
1259  }
1260  if (gridEnabled) {
1261    swiper.grid.updateWrapperSize(slideSize, snapGrid);
1262  }
1263
1264  // Remove last grid elements depending on width
1265  if (!params.centeredSlides) {
1266    const newSlidesGrid = [];
1267    for (let i = 0; i < snapGrid.length; i += 1) {
1268      let slidesGridItem = snapGrid[i];
1269      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
1270      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
1271        newSlidesGrid.push(slidesGridItem);
1272      }
1273    }
1274    snapGrid = newSlidesGrid;
1275    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
1276      snapGrid.push(swiper.virtualSize - swiperSize);
1277    }
1278  }
1279  if (isVirtual && params.loop) {
1280    const size = slidesSizesGrid[0] + spaceBetween;
1281    if (params.slidesPerGroup > 1) {
1282      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);
1283      const groupSize = size * params.slidesPerGroup;
1284      for (let i = 0; i < groups; i += 1) {
1285        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
1286      }
1287    }
1288    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {
1289      if (params.slidesPerGroup === 1) {
1290        snapGrid.push(snapGrid[snapGrid.length - 1] + size);
1291      }
1292      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
1293      swiper.virtualSize += size;
1294    }
1295  }
1296  if (snapGrid.length === 0) snapGrid = [0];
1297  if (spaceBetween !== 0) {
1298    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');
1299    slides.filter((_, slideIndex) => {
1300      if (!params.cssMode || params.loop) return true;
1301      if (slideIndex === slides.length - 1) {
1302        return false;
1303      }
1304      return true;
1305    }).forEach(slideEl => {
1306      slideEl.style[key] = `${spaceBetween}px`;
1307    });
1308  }
1309  if (params.centeredSlides && params.centeredSlidesBounds) {
1310    let allSlidesSize = 0;
1311    slidesSizesGrid.forEach(slideSizeValue => {
1312      allSlidesSize += slideSizeValue + (spaceBetween || 0);
1313    });
1314    allSlidesSize -= spaceBetween;
1315    const maxSnap = allSlidesSize 
vendor: 3,015 bytes, lines 1315-1396
1315- swiperSize;
1316    snapGrid = snapGrid.map(snap => {
1317      if (snap <= 0) return -offsetBefore;
1318      if (snap > maxSnap) return maxSnap + offsetAfter;
1319      return snap;
1320    });
1321  }
1322  if (params.centerInsufficientSlides) {
1323    let allSlidesSize = 0;
1324    slidesSizesGrid.forEach(slideSizeValue => {
1325      allSlidesSize += slideSizeValue + (spaceBetween || 0);
1326    });
1327    allSlidesSize -= spaceBetween;
1328    if (allSlidesSize < swiperSize) {
1329      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
1330      snapGrid.forEach((snap, snapIndex) => {
1331        snapGrid[snapIndex] = snap - allSlidesOffset;
1332      });
1333      slidesGrid.forEach((snap, snapIndex) => {
1334        slidesGrid[snapIndex] = snap + allSlidesOffset;
1335      });
1336    }
1337  }
1338  Object.assign(swiper, {
1339    slides,
1340    snapGrid,
1341    slidesGrid,
1342    slidesSizesGrid
1343  });
1344  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
1345    (0,utils.s)(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);
1346    (0,utils.s)(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);
1347    const addToSnapGrid = -swiper.snapGrid[0];
1348    const addToSlidesGrid = -swiper.slidesGrid[0];
1349    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);
1350    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);
1351  }
1352  if (slidesLength !== previousSlidesLength) {
1353    swiper.emit('slidesLengthChange');
1354  }
1355  if (snapGrid.length !== previousSnapGridLength) {
1356    if (swiper.params.watchOverflow) swiper.checkOverflow();
1357    swiper.emit('snapGridLengthChange');
1358  }
1359  if (slidesGrid.length !== previousSlidesGridLength) {
1360    swiper.emit('slidesGridLengthChange');
1361  }
1362  if (params.watchSlidesProgress) {
1363    swiper.updateSlidesOffset();
1364  }
1365  swiper.emit('slidesUpdated');
1366  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {
1367    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;
1368    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
1369    if (slidesLength <= params.maxBackfaceHiddenSlides) {
1370      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);
1371    } else if (hasClassBackfaceClassAdded) {
1372      swiper.el.classList.remove(backFaceHiddenClass);
1373    }
1374  }
1375}
1376
1377function updateAutoHeight(speed) {
1378  const swiper = this;
1379  const activeSlides = [];
1380  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
1381  let newHeight = 0;
1382  let i;
1383  if (typeof speed === 'number') {
1384    swiper.setTransition(speed);
1385  } else if (speed === true) {
1386    swiper.setTransition(swiper.params.speed);
1387  }
1388  const getSlideByIndex = index => {
1389    if (isVirtual) {
1390      return swiper.slides[swiper.getSlideIndexByData(index)];
1391    }
1392    return swiper.slides[index];
1393  };
1394  // Find slides currently in view
1395  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
1396    if (swiper.params.centeredSlides) {
vendor: 1,720 bytes, lines 1397-1449
1397      (swiper.visibleSlides || []).forEach(slide => {
1398        activeSlides.push(slide);
1399      });
1400    } else {
1401      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
1402        const index = swiper.activeIndex + i;
1403        if (index > swiper.slides.length && !isVirtual) break;
1404        activeSlides.push(getSlideByIndex(index));
1405      }
1406    }
1407  } else {
1408    activeSlides.push(getSlideByIndex(swiper.activeIndex));
1409  }
1410
1411  // Find new height from highest slide in view
1412  for (i = 0; i < activeSlides.length; i += 1) {
1413    if (typeof activeSlides[i] !== 'undefined') {
1414      const height = activeSlides[i].offsetHeight;
1415      newHeight = height > newHeight ? height : newHeight;
1416    }
1417  }
1418
1419  // Update Height
1420  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;
1421}
1422
1423function updateSlidesOffset() {
1424  const swiper = this;
1425  const slides = swiper.slides;
1426  // eslint-disable-next-line
1427  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;
1428  for (let i = 0; i < slides.length; i += 1) {
1429    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();
1430  }
1431}
1432
1433function updateSlidesProgress(translate) {
1434  if (translate === void 0) {
1435    translate = this && this.translate || 0;
1436  }
1437  const swiper = this;
1438  const params = swiper.params;
1439  const {
1440    slides,
1441    rtlTranslate: rtl,
1442    snapGrid
1443  } = swiper;
1444  if (slides.length === 0) return;
1445  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
1446  let offsetCenter = -translate;
1447  if (rtl) offsetCenter = translate;
1448
1449  // Visible Slides
vendor: 9,065 bytes, lines 1450-1687
1450  slides.forEach(slideEl => {
1451    slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass);
1452  });
1453  swiper.visibleSlidesIndexes = [];
1454  swiper.visibleSlides = [];
1455  let spaceBetween = params.spaceBetween;
1456  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
1457    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;
1458  } else if (typeof spaceBetween === 'string') {
1459    spaceBetween = parseFloat(spaceBetween);
1460  }
1461  for (let i = 0; i < slides.length; i += 1) {
1462    const slide = slides[i];
1463    let slideOffset = slide.swiperSlideOffset;
1464    if (params.cssMode && params.centeredSlides) {
1465      slideOffset -= slides[0].swiperSlideOffset;
1466    }
1467    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
1468    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
1469    const slideBefore = -(offsetCenter - slideOffset);
1470    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
1471    const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];
1472    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
1473    if (isVisible) {
1474      swiper.visibleSlides.push(slide);
1475      swiper.visibleSlidesIndexes.push(i);
1476      slides[i].classList.add(params.slideVisibleClass);
1477    }
1478    if (isFullyVisible) {
1479      slides[i].classList.add(params.slideFullyVisibleClass);
1480    }
1481    slide.progress = rtl ? -slideProgress : slideProgress;
1482    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
1483  }
1484}
1485
1486function updateProgress(translate) {
1487  const swiper = this;
1488  if (typeof translate === 'undefined') {
1489    const multiplier = swiper.rtlTranslate ? -1 : 1;
1490    // eslint-disable-next-line
1491    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
1492  }
1493  const params = swiper.params;
1494  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1495  let {
1496    progress,
1497    isBeginning,
1498    isEnd,
1499    progressLoop
1500  } = swiper;
1501  const wasBeginning = isBeginning;
1502  const wasEnd = isEnd;
1503  if (translatesDiff === 0) {
1504    progress = 0;
1505    isBeginning = true;
1506    isEnd = true;
1507  } else {
1508    progress = (translate - swiper.minTranslate()) / translatesDiff;
1509    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;
1510    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;
1511    isBeginning = isBeginningRounded || progress <= 0;
1512    isEnd = isEndRounded || progress >= 1;
1513    if (isBeginningRounded) progress = 0;
1514    if (isEndRounded) progress = 1;
1515  }
1516  if (params.loop) {
1517    const firstSlideIndex = swiper.getSlideIndexByData(0);
1518    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
1519    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
1520    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
1521    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
1522    const translateAbs = Math.abs(translate);
1523    if (translateAbs >= firstSlideTranslate) {
1524      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
1525    } else {
1526      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
1527    }
1528    if (progressLoop > 1) progressLoop -= 1;
1529  }
1530  Object.assign(swiper, {
1531    progress,
1532    progressLoop,
1533    isBeginning,
1534    isEnd
1535  });
1536  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);
1537  if (isBeginning && !wasBeginning) {
1538    swiper.emit('reachBeginning toEdge');
1539  }
1540  if (isEnd && !wasEnd) {
1541    swiper.emit('reachEnd toEdge');
1542  }
1543  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
1544    swiper.emit('fromEdge');
1545  }
1546  swiper.emit('progress', progress);
1547}
1548
1549function updateSlidesClasses() {
1550  const swiper = this;
1551  const {
1552    slides,
1553    params,
1554    slidesEl,
1555    activeIndex
1556  } = swiper;
1557  const isVirtual = swiper.virtual && params.virtual.enabled;
1558  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
1559  const getFilteredSlide = selector => {
1560    return (0,utils.e)(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
1561  };
1562  slides.forEach(slideEl => {
1563    slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
1564  });
1565  let activeSlide;
1566  let prevSlide;
1567  let nextSlide;
1568  if (isVirtual) {
1569    if (params.loop) {
1570      let slideIndex = activeIndex - swiper.virtual.slidesBefore;
1571      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
1572      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
1573      activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
1574    } else {
1575      activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
1576    }
1577  } else {
1578    if (gridEnabled) {
1579      activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];
1580      nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];
1581      prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];
1582    } else {
1583      activeSlide = slides[activeIndex];
1584    }
1585  }
1586  if (activeSlide) {
1587    // Active classes
1588    activeSlide.classList.add(params.slideActiveClass);
1589    if (gridEnabled) {
1590      if (nextSlide) {
1591        nextSlide.classList.add(params.slideNextClass);
1592      }
1593      if (prevSlide) {
1594        prevSlide.classList.add(params.slidePrevClass);
1595      }
1596    } else {
1597      // Next Slide
1598      nextSlide = (0,utils.o)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
1599      if (params.loop && !nextSlide) {
1600        nextSlide = slides[0];
1601      }
1602      if (nextSlide) {
1603        nextSlide.classList.add(params.slideNextClass);
1604      }
1605
1606      // Prev Slide
1607      prevSlide = (0,utils.p)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
1608      if (params.loop && !prevSlide === 0) {
1609        prevSlide = slides[slides.length - 1];
1610      }
1611      if (prevSlide) {
1612        prevSlide.classList.add(params.slidePrevClass);
1613      }
1614    }
1615  }
1616  swiper.emitSlidesClasses();
1617}
1618
1619const processLazyPreloader = (swiper, imageEl) => {
1620  if (!swiper || swiper.destroyed || !swiper.params) return;
1621  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
1622  const slideEl = imageEl.closest(slideSelector());
1623  if (slideEl) {
1624    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);
1625    if (!lazyEl && swiper.isElement) {
1626      if (slideEl.shadowRoot) {
1627        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
1628      } else {
1629        // init later
1630        requestAnimationFrame(() => {
1631          if (slideEl.shadowRoot) {
1632            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
1633            if (lazyEl) lazyEl.remove();
1634          }
1635        });
1636      }
1637    }
1638    if (lazyEl) lazyEl.remove();
1639  }
1640};
1641const unlazy = (swiper, index) => {
1642  if (!swiper.slides[index]) return;
1643  const imageEl = swiper.slides[index].querySelector('[loading="lazy"]');
1644  if (imageEl) imageEl.removeAttribute('loading');
1645};
1646const preload = swiper => {
1647  if (!swiper || swiper.destroyed || !swiper.params) return;
1648  let amount = swiper.params.lazyPreloadPrevNext;
1649  const len = swiper.slides.length;
1650  if (!len || !amount || amount < 0) return;
1651  amount = Math.min(amount, len);
1652  const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);
1653  const activeIndex = swiper.activeIndex;
1654  if (swiper.params.grid && swiper.params.grid.rows > 1) {
1655    const activeColumn = activeIndex;
1656    const preloadColumns = [activeColumn - amount];
1657    preloadColumns.push(...Array.from({
1658      length: amount
1659    }).map((_, i) => {
1660      return activeColumn + slidesPerView + i;
1661    }));
1662    swiper.slides.forEach((slideEl, i) => {
1663      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);
1664    });
1665    return;
1666  }
1667  const slideIndexLastInView = activeIndex + slidesPerView - 1;
1668  if (swiper.params.rewind || swiper.params.loop) {
1669    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {
1670      const realIndex = (i % len + len) % len;
1671      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);
1672    }
1673  } else {
1674    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {
1675      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {
1676        unlazy(swiper, i);
1677      }
1678    }
1679  }
1680};
1681
1682function getActiveIndexByTranslate(swiper) {
1683  const {
1684    slidesGrid,
1685    params
1686  } = swiper;
1687  const translate = swiper.rtlTranslate ? swiper.translate : -swi
vendor: 3,767 bytes, lines 1687-1797
1687per.translate;
1688  let activeIndex;
1689  for (let i = 0; i < slidesGrid.length; i += 1) {
1690    if (typeof slidesGrid[i + 1] !== 'undefined') {
1691      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
1692        activeIndex = i;
1693      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
1694        activeIndex = i + 1;
1695      }
1696    } else if (translate >= slidesGrid[i]) {
1697      activeIndex = i;
1698    }
1699  }
1700  // Normalize slideIndex
1701  if (params.normalizeSlideIndex) {
1702    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
1703  }
1704  return activeIndex;
1705}
1706function updateActiveIndex(newActiveIndex) {
1707  const swiper = this;
1708  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
1709  const {
1710    snapGrid,
1711    params,
1712    activeIndex: previousIndex,
1713    realIndex: previousRealIndex,
1714    snapIndex: previousSnapIndex
1715  } = swiper;
1716  let activeIndex = newActiveIndex;
1717  let snapIndex;
1718  const getVirtualRealIndex = aIndex => {
1719    let realIndex = aIndex - swiper.virtual.slidesBefore;
1720    if (realIndex < 0) {
1721      realIndex = swiper.virtual.slides.length + realIndex;
1722    }
1723    if (realIndex >= swiper.virtual.slides.length) {
1724      realIndex -= swiper.virtual.slides.length;
1725    }
1726    return realIndex;
1727  };
1728  if (typeof activeIndex === 'undefined') {
1729    activeIndex = getActiveIndexByTranslate(swiper);
1730  }
1731  if (snapGrid.indexOf(translate) >= 0) {
1732    snapIndex = snapGrid.indexOf(translate);
1733  } else {
1734    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
1735    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
1736  }
1737  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
1738  if (activeIndex === previousIndex && !swiper.params.loop) {
1739    if (snapIndex !== previousSnapIndex) {
1740      swiper.snapIndex = snapIndex;
1741      swiper.emit('snapIndexChange');
1742    }
1743    return;
1744  }
1745  if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
1746    swiper.realIndex = getVirtualRealIndex(activeIndex);
1747    return;
1748  }
1749  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
1750
1751  // Get real index
1752  let realIndex;
1753  if (swiper.virtual && params.virtual.enabled && params.loop) {
1754    realIndex = getVirtualRealIndex(activeIndex);
1755  } else if (gridEnabled) {
1756    const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];
1757    let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);
1758    if (Number.isNaN(activeSlideIndex)) {
1759      activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);
1760    }
1761    realIndex = Math.floor(activeSlideIndex / params.grid.rows);
1762  } else if (swiper.slides[activeIndex]) {
1763    const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');
1764    if (slideIndex) {
1765      realIndex = parseInt(slideIndex, 10);
1766    } else {
1767      realIndex = activeIndex;
1768    }
1769  } else {
1770    realIndex = activeIndex;
1771  }
1772  Object.assign(swiper, {
1773    previousSnapIndex,
1774    snapIndex,
1775    previousRealIndex,
1776    realIndex,
1777    previousIndex,
1778    activeIndex
1779  });
1780  if (swiper.initialized) {
1781    preload(swiper);
1782  }
1783  swiper.emit('activeIndexChange');
1784  swiper.emit('snapIndexChange');
1785  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
1786    if (previousRealIndex !== realIndex) {
1787      swiper.emit('realIndexChange');
1788    }
1789    swiper.emit('slideChange');
1790  }
1791}
1792
1793function updateClickedSlide(el, path) {
1794  const swiper = this;
1795  const params = swiper.params;
1796  let slide = el.closest(`.${params.slideClass}, swiper-slide`);
1797  if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {
vendor: 17,916 bytes, lines 1798-2393
1798    [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {
1799      if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {
1800        slide = pathEl;
1801      }
1802    });
1803  }
1804  let slideFound = false;
1805  let slideIndex;
1806  if (slide) {
1807    for (let i = 0; i < swiper.slides.length; i += 1) {
1808      if (swiper.slides[i] === slide) {
1809        slideFound = true;
1810        slideIndex = i;
1811        break;
1812      }
1813    }
1814  }
1815  if (slide && slideFound) {
1816    swiper.clickedSlide = slide;
1817    if (swiper.virtual && swiper.params.virtual.enabled) {
1818      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);
1819    } else {
1820      swiper.clickedIndex = slideIndex;
1821    }
1822  } else {
1823    swiper.clickedSlide = undefined;
1824    swiper.clickedIndex = undefined;
1825    return;
1826  }
1827  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
1828    swiper.slideToClickedSlide();
1829  }
1830}
1831
1832var update = {
1833  updateSize,
1834  updateSlides,
1835  updateAutoHeight,
1836  updateSlidesOffset,
1837  updateSlidesProgress,
1838  updateProgress,
1839  updateSlidesClasses,
1840  updateActiveIndex,
1841  updateClickedSlide
1842};
1843
1844function getSwiperTranslate(axis) {
1845  if (axis === void 0) {
1846    axis = this.isHorizontal() ? 'x' : 'y';
1847  }
1848  const swiper = this;
1849  const {
1850    params,
1851    rtlTranslate: rtl,
1852    translate,
1853    wrapperEl
1854  } = swiper;
1855  if (params.virtualTranslate) {
1856    return rtl ? -translate : translate;
1857  }
1858  if (params.cssMode) {
1859    return translate;
1860  }
1861  let currentTranslate = (0,utils.i)(wrapperEl, axis);
1862  currentTranslate += swiper.cssOverflowAdjustment();
1863  if (rtl) currentTranslate = -currentTranslate;
1864  return currentTranslate || 0;
1865}
1866
1867function setTranslate(translate, byController) {
1868  const swiper = this;
1869  const {
1870    rtlTranslate: rtl,
1871    params,
1872    wrapperEl,
1873    progress
1874  } = swiper;
1875  let x = 0;
1876  let y = 0;
1877  const z = 0;
1878  if (swiper.isHorizontal()) {
1879    x = rtl ? -translate : translate;
1880  } else {
1881    y = translate;
1882  }
1883  if (params.roundLengths) {
1884    x = Math.floor(x);
1885    y = Math.floor(y);
1886  }
1887  swiper.previousTranslate = swiper.translate;
1888  swiper.translate = swiper.isHorizontal() ? x : y;
1889  if (params.cssMode) {
1890    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
1891  } else if (!params.virtualTranslate) {
1892    if (swiper.isHorizontal()) {
1893      x -= swiper.cssOverflowAdjustment();
1894    } else {
1895      y -= swiper.cssOverflowAdjustment();
1896    }
1897    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;
1898  }
1899
1900  // Check if we need to update progress
1901  let newProgress;
1902  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1903  if (translatesDiff === 0) {
1904    newProgress = 0;
1905  } else {
1906    newProgress = (translate - swiper.minTranslate()) / translatesDiff;
1907  }
1908  if (newProgress !== progress) {
1909    swiper.updateProgress(translate);
1910  }
1911  swiper.emit('setTranslate', swiper.translate, byController);
1912}
1913
1914function minTranslate() {
1915  return -this.snapGrid[0];
1916}
1917
1918function maxTranslate() {
1919  return -this.snapGrid[this.snapGrid.length - 1];
1920}
1921
1922function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
1923  if (translate === void 0) {
1924    translate = 0;
1925  }
1926  if (speed === void 0) {
1927    speed = this.params.speed;
1928  }
1929  if (runCallbacks === void 0) {
1930    runCallbacks = true;
1931  }
1932  if (translateBounds === void 0) {
1933    translateBounds = true;
1934  }
1935  const swiper = this;
1936  const {
1937    params,
1938    wrapperEl
1939  } = swiper;
1940  if (swiper.animating && params.preventInteractionOnTransition) {
1941    return false;
1942  }
1943  const minTranslate = swiper.minTranslate();
1944  const maxTranslate = swiper.maxTranslate();
1945  let newTranslate;
1946  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;
1947
1948  // Update progress
1949  swiper.updateProgress(newTranslate);
1950  if (params.cssMode) {
1951    const isH = swiper.isHorizontal();
1952    if (speed === 0) {
1953      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1954    } else {
1955      if (!swiper.support.smoothScroll) {
1956        (0,utils.q)({
1957          swiper,
1958          targetPosition: -newTranslate,
1959          side: isH ? 'left' : 'top'
1960        });
1961        return true;
1962      }
1963      wrapperEl.scrollTo({
1964        [isH ? 'left' : 'top']: -newTranslate,
1965        behavior: 'smooth'
1966      });
1967    }
1968    return true;
1969  }
1970  if (speed === 0) {
1971    swiper.setTransition(0);
1972    swiper.setTranslate(newTranslate);
1973    if (runCallbacks) {
1974      swiper.emit('beforeTransitionStart', speed, internal);
1975      swiper.emit('transitionEnd');
1976    }
1977  } else {
1978    swiper.setTransition(speed);
1979    swiper.setTranslate(newTranslate);
1980    if (runCallbacks) {
1981      swiper.emit('beforeTransitionStart', speed, internal);
1982      swiper.emit('transitionStart');
1983    }
1984    if (!swiper.animating) {
1985      swiper.animating = true;
1986      if (!swiper.onTranslateToWrapperTransitionEnd) {
1987        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
1988          if (!swiper || swiper.destroyed) return;
1989          if (e.target !== this) return;
1990          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1991          swiper.onTranslateToWrapperTransitionEnd = null;
1992          delete swiper.onTranslateToWrapperTransitionEnd;
1993          if (runCallbacks) {
1994            swiper.emit('transitionEnd');
1995          }
1996        };
1997      }
1998      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1999    }
2000  }
2001  return true;
2002}
2003
2004var translate = {
2005  getTranslate: getSwiperTranslate,
2006  setTranslate,
2007  minTranslate,
2008  maxTranslate,
2009  translateTo
2010};
2011
2012function setTransition(duration, byController) {
2013  const swiper = this;
2014  if (!swiper.params.cssMode) {
2015    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;
2016    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';
2017  }
2018  swiper.emit('setTransition', duration, byController);
2019}
2020
2021function transitionEmit(_ref) {
2022  let {
2023    swiper,
2024    runCallbacks,
2025    direction,
2026    step
2027  } = _ref;
2028  const {
2029    activeIndex,
2030    previousIndex
2031  } = swiper;
2032  let dir = direction;
2033  if (!dir) {
2034    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
2035  }
2036  swiper.emit(`transition${step}`);
2037  if (runCallbacks && activeIndex !== previousIndex) {
2038    if (dir === 'reset') {
2039      swiper.emit(`slideResetTransition${step}`);
2040      return;
2041    }
2042    swiper.emit(`slideChangeTransition${step}`);
2043    if (dir === 'next') {
2044      swiper.emit(`slideNextTransition${step}`);
2045    } else {
2046      swiper.emit(`slidePrevTransition${step}`);
2047    }
2048  }
2049}
2050
2051function transitionStart(runCallbacks, direction) {
2052  if (runCallbacks === void 0) {
2053    runCallbacks = true;
2054  }
2055  const swiper = this;
2056  const {
2057    params
2058  } = swiper;
2059  if (params.cssMode) return;
2060  if (params.autoHeight) {
2061    swiper.updateAutoHeight();
2062  }
2063  transitionEmit({
2064    swiper,
2065    runCallbacks,
2066    direction,
2067    step: 'Start'
2068  });
2069}
2070
2071function transitionEnd(runCallbacks, direction) {
2072  if (runCallbacks === void 0) {
2073    runCallbacks = true;
2074  }
2075  const swiper = this;
2076  const {
2077    params
2078  } = swiper;
2079  swiper.animating = false;
2080  if (params.cssMode) return;
2081  swiper.setTransition(0);
2082  transitionEmit({
2083    swiper,
2084    runCallbacks,
2085    direction,
2086    step: 'End'
2087  });
2088}
2089
2090var transition = {
2091  setTransition,
2092  transitionStart,
2093  transitionEnd
2094};
2095
2096function slideTo(index, speed, runCallbacks, internal, initial) {
2097  if (index === void 0) {
2098    index = 0;
2099  }
2100  if (speed === void 0) {
2101    speed = this.params.speed;
2102  }
2103  if (runCallbacks === void 0) {
2104    runCallbacks = true;
2105  }
2106  if (typeof index === 'string') {
2107    index = parseInt(index, 10);
2108  }
2109  const swiper = this;
2110  let slideIndex = index;
2111  if (slideIndex < 0) slideIndex = 0;
2112  const {
2113    params,
2114    snapGrid,
2115    slidesGrid,
2116    previousIndex,
2117    activeIndex,
2118    rtlTranslate: rtl,
2119    wrapperEl,
2120    enabled
2121  } = swiper;
2122  if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {
2123    return false;
2124  }
2125  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
2126  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
2127  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
2128  const translate = -snapGrid[snapIndex];
2129  // Normalize slideIndex
2130  if (params.normalizeSlideIndex) {
2131    for (let i = 0; i < slidesGrid.length; i += 1) {
2132      const normalizedTranslate = -Math.floor(translate * 100);
2133      const normalizedGrid = Math.floor(slidesGrid[i] * 100);
2134      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
2135      if (typeof slidesGrid[i + 1] !== 'undefined') {
2136        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {
2137          slideIndex = i;
2138        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {
2139          slideIndex = i + 1;
2140        }
2141      } else if (normalizedTranslate >= normalizedGrid) {
2142        slideIndex = i;
2143      }
2144    }
2145  }
2146  // Directions locks
2147  if (swiper.initialized && slideIndex !== activeIndex) {
2148    if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {
2149      return false;
2150    }
2151    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
2152      if ((activeIndex || 0) !== slideIndex) {
2153        return false;
2154      }
2155    }
2156  }
2157  if (slideIndex !== (previousIndex || 0) && runCallbacks) {
2158    swiper.emit('beforeSlideChangeStart');
2159  }
2160
2161  // Update progress
2162  swiper.updateProgress(translate);
2163  let direction;
2164  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';
2165
2166  // Update Index
2167  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
2168    swiper.updateActiveIndex(slideIndex);
2169    // Update Height
2170    if (params.autoHeight) {
2171      swiper.updateAutoHeight();
2172    }
2173    swiper.updateSlidesClasses();
2174    if (params.effect !== 'slide') {
2175      swiper.setTranslate(translate);
2176    }
2177    if (direction !== 'reset') {
2178      swiper.transitionStart(runCallbacks, direction);
2179      swiper.transitionEnd(runCallbacks, direction);
2180    }
2181    return false;
2182  }
2183  if (params.cssMode) {
2184    const isH = swiper.isHorizontal();
2185    const t = rtl ? translate : -translate;
2186    if (speed === 0) {
2187      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
2188      if (isVirtual) {
2189        swiper.wrapperEl.style.scrollSnapType = 'none';
2190        swiper._immediateVirtual = true;
2191      }
2192      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {
2193        swiper._cssModeVirtualInitialSet = true;
2194        requestAnimationFrame(() => {
2195          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2196        });
2197      } else {
2198        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2199      }
2200      if (isVirtual) {
2201        requestAnimationFrame(() => {
2202          swiper.wrapperEl.style.scrollSnapType = '';
2203          swiper._immediateVirtual = false;
2204        });
2205      }
2206    } else {
2207      if (!swiper.support.smoothScroll) {
2208        (0,utils.q)({
2209          swiper,
2210          targetPosition: t,
2211          side: isH ? 'left' : 'top'
2212        });
2213        return true;
2214      }
2215      wrapperEl.scrollTo({
2216        [isH ? 'left' : 'top']: t,
2217        behavior: 'smooth'
2218      });
2219    }
2220    return true;
2221  }
2222  swiper.setTransition(speed);
2223  swiper.setTranslate(translate);
2224  swiper.updateActiveIndex(slideIndex);
2225  swiper.updateSlidesClasses();
2226  swiper.emit('beforeTransitionStart', speed, internal);
2227  swiper.transitionStart(runCallbacks, direction);
2228  if (speed === 0) {
2229    swiper.transitionEnd(runCallbacks, direction);
2230  } else if (!swiper.animating) {
2231    swiper.animating = true;
2232    if (!swiper.onSlideToWrapperTransitionEnd) {
2233      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
2234        if (!swiper || swiper.destroyed) return;
2235        if (e.target !== this) return;
2236        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2237        swiper.onSlideToWrapperTransitionEnd = null;
2238        delete swiper.onSlideToWrapperTransitionEnd;
2239        swiper.transitionEnd(runCallbacks, direction);
2240      };
2241    }
2242    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2243  }
2244  return true;
2245}
2246
2247function slideToLoop(index, speed, runCallbacks, internal) {
2248  if (index === void 0) {
2249    index = 0;
2250  }
2251  if (speed === void 0) {
2252    speed = this.params.speed;
2253  }
2254  if (runCallbacks === void 0) {
2255    runCallbacks = true;
2256  }
2257  if (typeof index === 'string') {
2258    const indexAsNumber = parseInt(index, 10);
2259    index = indexAsNumber;
2260  }
2261  const swiper = this;
2262  const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;
2263  let newIndex = index;
2264  if (swiper.params.loop) {
2265    if (swiper.virtual && swiper.params.virtual.enabled) {
2266      // eslint-disable-next-line
2267      newIndex = newIndex + swiper.virtual.slidesBefore;
2268    } else {
2269      let targetSlideIndex;
2270      if (gridEnabled) {
2271        const slideIndex = newIndex * swiper.params.grid.rows;
2272        targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;
2273      } else {
2274        targetSlideIndex = swiper.getSlideIndexByData(newIndex);
2275      }
2276      const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;
2277      const {
2278        centeredSlides
2279      } = swiper.params;
2280      let slidesPerView = swiper.params.slidesPerView;
2281      if (slidesPerView === 'auto') {
2282        slidesPerView = swiper.slidesPerViewDynamic();
2283      } else {
2284        slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));
2285        if (centeredSlides && slidesPerView % 2 === 0) {
2286          slidesPerView = slidesPerView + 1;
2287        }
2288      }
2289      let needLoopFix = cols - targetSlideIndex < slidesPerView;
2290      if (centeredSlides) {
2291        needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);
2292      }
2293      if (needLoopFix) {
2294        const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';
2295        swiper.loopFix({
2296          direction,
2297          slideTo: true,
2298          activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,
2299          slideRealIndex: direction === 'next' ? swiper.realIndex : undefined
2300        });
2301      }
2302      if (gridEnabled) {
2303        const slideIndex = newIndex * swiper.params.grid.rows;
2304        newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;
2305      } else {
2306        newIndex = swiper.getSlideIndexByData(newIndex);
2307      }
2308    }
2309  }
2310  requestAnimationFrame(() => {
2311    swiper.slideTo(newIndex, speed, runCallbacks, internal);
2312  });
2313  return swiper;
2314}
2315
2316/* eslint no-unused-vars: "off" */
2317function slideNext(speed, runCallbacks, internal) {
2318  if (speed === void 0) {
2319    speed = this.params.speed;
2320  }
2321  if (runCallbacks === void 0) {
2322    runCallbacks = true;
2323  }
2324  const swiper = this;
2325  const {
2326    enabled,
2327    params,
2328    animating
2329  } = swiper;
2330  if (!enabled) return swiper;
2331  let perGroup = params.slidesPerGroup;
2332  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
2333    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);
2334  }
2335  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;
2336  const isVirtual = swiper.virtual && params.virtual.enabled;
2337  if (params.loop) {
2338    if (animating && !isVirtual && params.loopPreventsSliding) return false;
2339    swiper.loopFix({
2340      direction: 'next'
2341    });
2342    // eslint-disable-next-line
2343    swiper._clientLeft = swiper.wrapperEl.clientLeft;
2344    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {
2345      requestAnimationFrame(() => {
2346        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
2347      });
2348      return true;
2349    }
2350  }
2351  if (params.rewind && swiper.isEnd) {
2352    return swiper.slideTo(0, speed, runCallbacks, internal);
2353  }
2354  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
2355}
2356
2357/* eslint no-unused-vars: "off" */
2358function slidePrev(speed, runCallbacks, internal) {
2359  if (speed === void 0) {
2360    speed = this.params.speed;
2361  }
2362  if (runCallbacks === void 0) {
2363    runCallbacks = true;
2364  }
2365  const swiper = this;
2366  const {
2367    params,
2368    snapGrid,
2369    slidesGrid,
2370    rtlTranslate,
2371    enabled,
2372    animating
2373  } = swiper;
2374  if (!enabled) return swiper;
2375  const isVirtual = swiper.virtual && params.virtual.enabled;
2376  if (params.loop) {
2377    if (animating && !isVirtual && params.loopPreventsSliding) return false;
2378    swiper.loopFix({
2379      direction: 'prev'
2380    });
2381    // eslint-disable-next-line
2382    swiper._clientLeft = swiper.wrapperEl.clientLeft;
2383  }
2384  const translate = rtlTranslate ? swiper.translate : -swiper.translate;
2385  function normalize(val) {
2386    if (val < 0) return -Math.floor(Math.abs(val));
2387    return Math.floor(val);
2388  }
2389  const normalizedTranslate = normalize(translate);
2390  const normalizedSnapGrid = snapGrid.map(val => normalize(val));
2391  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
2392  if (typeof prevSnap === 'undefined' && params.cssMode) {
2393    let prevSnapIndex;
vendor: 10,108 bytes, lines 2394-2654
2394    snapGrid.forEach((snap, snapIndex) => {
2395      if (normalizedTranslate >= snap) {
2396        // prevSnap = snap;
2397        prevSnapIndex = snapIndex;
2398      }
2399    });
2400    if (typeof prevSnapIndex !== 'undefined') {
2401      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
2402    }
2403  }
2404  let prevIndex = 0;
2405  if (typeof prevSnap !== 'undefined') {
2406    prevIndex = slidesGrid.indexOf(prevSnap);
2407    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
2408    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
2409      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;
2410      prevIndex = Math.max(prevIndex, 0);
2411    }
2412  }
2413  if (params.rewind && swiper.isBeginning) {
2414    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
2415    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);
2416  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {
2417    requestAnimationFrame(() => {
2418      swiper.slideTo(prevIndex, speed, runCallbacks, internal);
2419    });
2420    return true;
2421  }
2422  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
2423}
2424
2425/* eslint no-unused-vars: "off" */
2426function slideReset(speed, runCallbacks, internal) {
2427  if (speed === void 0) {
2428    speed = this.params.speed;
2429  }
2430  if (runCallbacks === void 0) {
2431    runCallbacks = true;
2432  }
2433  const swiper = this;
2434  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
2435}
2436
2437/* eslint no-unused-vars: "off" */
2438function slideToClosest(speed, runCallbacks, internal, threshold) {
2439  if (speed === void 0) {
2440    speed = this.params.speed;
2441  }
2442  if (runCallbacks === void 0) {
2443    runCallbacks = true;
2444  }
2445  if (threshold === void 0) {
2446    threshold = 0.5;
2447  }
2448  const swiper = this;
2449  let index = swiper.activeIndex;
2450  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
2451  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
2452  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
2453  if (translate >= swiper.snapGrid[snapIndex]) {
2454    // The current translate is on or after the current snap index, so the choice
2455    // is between the current index and the one after it.
2456    const currentSnap = swiper.snapGrid[snapIndex];
2457    const nextSnap = swiper.snapGrid[snapIndex + 1];
2458    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
2459      index += swiper.params.slidesPerGroup;
2460    }
2461  } else {
2462    // The current translate is before the current snap index, so the choice
2463    // is between the current index and the one before it.
2464    const prevSnap = swiper.snapGrid[snapIndex - 1];
2465    const currentSnap = swiper.snapGrid[snapIndex];
2466    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {
2467      index -= swiper.params.slidesPerGroup;
2468    }
2469  }
2470  index = Math.max(index, 0);
2471  index = Math.min(index, swiper.slidesGrid.length - 1);
2472  return swiper.slideTo(index, speed, runCallbacks, internal);
2473}
2474
2475function slideToClickedSlide() {
2476  const swiper = this;
2477  const {
2478    params,
2479    slidesEl
2480  } = swiper;
2481  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
2482  let slideToIndex = swiper.clickedIndex;
2483  let realIndex;
2484  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
2485  if (params.loop) {
2486    if (swiper.animating) return;
2487    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
2488    if (params.centeredSlides) {
2489      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
2490        swiper.loopFix();
2491        slideToIndex = swiper.getSlideIndex((0,utils.e)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
2492        (0,utils.n)(() => {
2493          swiper.slideTo(slideToIndex);
2494        });
2495      } else {
2496        swiper.slideTo(slideToIndex);
2497      }
2498    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
2499      swiper.loopFix();
2500      slideToIndex = swiper.getSlideIndex((0,utils.e)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
2501      (0,utils.n)(() => {
2502        swiper.slideTo(slideToIndex);
2503      });
2504    } else {
2505      swiper.slideTo(slideToIndex);
2506    }
2507  } else {
2508    swiper.slideTo(slideToIndex);
2509  }
2510}
2511
2512var slide = {
2513  slideTo,
2514  slideToLoop,
2515  slideNext,
2516  slidePrev,
2517  slideReset,
2518  slideToClosest,
2519  slideToClickedSlide
2520};
2521
2522function loopCreate(slideRealIndex) {
2523  const swiper = this;
2524  const {
2525    params,
2526    slidesEl
2527  } = swiper;
2528  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
2529  const initSlides = () => {
2530    const slides = (0,utils.e)(slidesEl, `.${params.slideClass}, swiper-slide`);
2531    slides.forEach((el, index) => {
2532      el.setAttribute('data-swiper-slide-index', index);
2533    });
2534  };
2535  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
2536  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);
2537  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;
2538  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;
2539  const addBlankSlides = amountOfSlides => {
2540    for (let i = 0; i < amountOfSlides; i += 1) {
2541      const slideEl = swiper.isElement ? (0,utils.c)('swiper-slide', [params.slideBlankClass]) : (0,utils.c)('div', [params.slideClass, params.slideBlankClass]);
2542      swiper.slidesEl.append(slideEl);
2543    }
2544  };
2545  if (shouldFillGroup) {
2546    if (params.loopAddBlankSlides) {
2547      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;
2548      addBlankSlides(slidesToAdd);
2549      swiper.recalcSlides();
2550      swiper.updateSlides();
2551    } else {
2552      (0,utils.r)('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)');
2553    }
2554    initSlides();
2555  } else if (shouldFillGrid) {
2556    if (params.loopAddBlankSlides) {
2557      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;
2558      addBlankSlides(slidesToAdd);
2559      swiper.recalcSlides();
2560      swiper.updateSlides();
2561    } else {
2562      (0,utils.r)('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)');
2563    }
2564    initSlides();
2565  } else {
2566    initSlides();
2567  }
2568  swiper.loopFix({
2569    slideRealIndex,
2570    direction: params.centeredSlides ? undefined : 'next'
2571  });
2572}
2573
2574function loopFix(_temp) {
2575  let {
2576    slideRealIndex,
2577    slideTo = true,
2578    direction,
2579    setTranslate,
2580    activeSlideIndex,
2581    byController,
2582    byMousewheel
2583  } = _temp === void 0 ? {} : _temp;
2584  const swiper = this;
2585  if (!swiper.params.loop) return;
2586  swiper.emit('beforeLoopFix');
2587  const {
2588    slides,
2589    allowSlidePrev,
2590    allowSlideNext,
2591    slidesEl,
2592    params
2593  } = swiper;
2594  const {
2595    centeredSlides
2596  } = params;
2597  swiper.allowSlidePrev = true;
2598  swiper.allowSlideNext = true;
2599  if (swiper.virtual && params.virtual.enabled) {
2600    if (slideTo) {
2601      if (!params.centeredSlides && swiper.snapIndex === 0) {
2602        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
2603      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
2604        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
2605      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
2606        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
2607      }
2608    }
2609    swiper.allowSlidePrev = allowSlidePrev;
2610    swiper.allowSlideNext = allowSlideNext;
2611    swiper.emit('loopFix');
2612    return;
2613  }
2614  let slidesPerView = params.slidesPerView;
2615  if (slidesPerView === 'auto') {
2616    slidesPerView = swiper.slidesPerViewDynamic();
2617  } else {
2618    slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));
2619    if (centeredSlides && slidesPerView % 2 === 0) {
2620      slidesPerView = slidesPerView + 1;
2621    }
2622  }
2623  const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;
2624  let loopedSlides = slidesPerGroup;
2625  if (loopedSlides % slidesPerGroup !== 0) {
2626    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;
2627  }
2628  loopedSlides += params.loopAdditionalSlides;
2629  swiper.loopedSlides = loopedSlides;
2630  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
2631  if (slides.length < slidesPerView + loopedSlides) {
2632    (0,utils.r)('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');
2633  } else if (gridEnabled && params.grid.fill === 'row') {
2634    (0,utils.r)('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');
2635  }
2636  const prependSlidesIndexes = [];
2637  const appendSlidesIndexes = [];
2638  let activeIndex = swiper.activeIndex;
2639  if (typeof activeSlideIndex === 'undefined') {
2640    activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);
2641  } else {
2642    activeIndex = activeSlideIndex;
2643  }
2644  const isNext = direction === 'next' || !direction;
2645  const isPrev = direction === 'prev' || !direction;
2646  let slidesPrepended = 0;
2647  let slidesAppended = 0;
2648  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;
2649  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;
2650  const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);
2651  // prepend last slides before start
2652  if (activeColIndexWithShift < loopedSlides) {
2653    slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);
2654    for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {
vendor: 5,168 bytes, lines 2655-2787
2655      const index = i - Math.floor(i / cols) * cols;
2656      if (gridEnabled) {
2657        const colIndexToPrepend = cols - index - 1;
2658        for (let i = slides.length - 1; i >= 0; i -= 1) {
2659          if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);
2660        }
2661        // slides.forEach((slide, slideIndex) => {
2662        //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);
2663        // });
2664      } else {
2665        prependSlidesIndexes.push(cols - index - 1);
2666      }
2667    }
2668  } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {
2669    slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);
2670    for (let i = 0; i < slidesAppended; i += 1) {
2671      const index = i - Math.floor(i / cols) * cols;
2672      if (gridEnabled) {
2673        slides.forEach((slide, slideIndex) => {
2674          if (slide.column === index) appendSlidesIndexes.push(slideIndex);
2675        });
2676      } else {
2677        appendSlidesIndexes.push(index);
2678      }
2679    }
2680  }
2681  swiper.__preventObserver__ = true;
2682  requestAnimationFrame(() => {
2683    swiper.__preventObserver__ = false;
2684  });
2685  if (isPrev) {
2686    prependSlidesIndexes.forEach(index => {
2687      slides[index].swiperLoopMoveDOM = true;
2688      slidesEl.prepend(slides[index]);
2689      slides[index].swiperLoopMoveDOM = false;
2690    });
2691  }
2692  if (isNext) {
2693    appendSlidesIndexes.forEach(index => {
2694      slides[index].swiperLoopMoveDOM = true;
2695      slidesEl.append(slides[index]);
2696      slides[index].swiperLoopMoveDOM = false;
2697    });
2698  }
2699  swiper.recalcSlides();
2700  if (params.slidesPerView === 'auto') {
2701    swiper.updateSlides();
2702  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {
2703    swiper.slides.forEach((slide, slideIndex) => {
2704      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);
2705    });
2706  }
2707  if (params.watchSlidesProgress) {
2708    swiper.updateSlidesOffset();
2709  }
2710  if (slideTo) {
2711    if (prependSlidesIndexes.length > 0 && isPrev) {
2712      if (typeof slideRealIndex === 'undefined') {
2713        const currentSlideTranslate = swiper.slidesGrid[activeIndex];
2714        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
2715        const diff = newSlideTranslate - currentSlideTranslate;
2716        if (byMousewheel) {
2717          swiper.setTranslate(swiper.translate - diff);
2718        } else {
2719          swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);
2720          if (setTranslate) {
2721            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
2722            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
2723          }
2724        }
2725      } else {
2726        if (setTranslate) {
2727          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;
2728          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);
2729          swiper.touchEventsData.currentTranslate = swiper.translate;
2730        }
2731      }
2732    } else if (appendSlidesIndexes.length > 0 && isNext) {
2733      if (typeof slideRealIndex === 'undefined') {
2734        const currentSlideTranslate = swiper.slidesGrid[activeIndex];
2735        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
2736        const diff = newSlideTranslate - currentSlideTranslate;
2737        if (byMousewheel) {
2738          swiper.setTranslate(swiper.translate - diff);
2739        } else {
2740          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
2741          if (setTranslate) {
2742            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
2743            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
2744          }
2745        }
2746      } else {
2747        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;
2748        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);
2749      }
2750    }
2751  }
2752  swiper.allowSlidePrev = allowSlidePrev;
2753  swiper.allowSlideNext = allowSlideNext;
2754  if (swiper.controller && swiper.controller.control && !byController) {
2755    const loopParams = {
2756      slideRealIndex,
2757      direction,
2758      setTranslate,
2759      activeSlideIndex,
2760      byController: true
2761    };
2762    if (Array.isArray(swiper.controller.control)) {
2763      swiper.controller.control.forEach(c => {
2764        if (!c.destroyed && c.params.loop) c.loopFix({
2765          ...loopParams,
2766          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false
2767        });
2768      });
2769    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {
2770      swiper.controller.control.loopFix({
2771        ...loopParams,
2772        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false
2773      });
2774    }
2775  }
2776  swiper.emit('loopFix');
2777}
2778
2779function loopDestroy() {
2780  const swiper = this;
2781  const {
2782    params,
2783    slidesEl
2784  } = swiper;
2785  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
2786  swiper.recalcSlides();
2787  const newSlidesOrder = [];
vendor: 17,490 bytes, lines 2788-3301
2788  swiper.slides.forEach(slideEl => {
2789    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;
2790    newSlidesOrder[index] = slideEl;
2791  });
2792  swiper.slides.forEach(slideEl => {
2793    slideEl.removeAttribute('data-swiper-slide-index');
2794  });
2795  newSlidesOrder.forEach(slideEl => {
2796    slidesEl.append(slideEl);
2797  });
2798  swiper.recalcSlides();
2799  swiper.slideTo(swiper.realIndex, 0);
2800}
2801
2802var loop = {
2803  loopCreate,
2804  loopFix,
2805  loopDestroy
2806};
2807
2808function setGrabCursor(moving) {
2809  const swiper = this;
2810  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
2811  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;
2812  if (swiper.isElement) {
2813    swiper.__preventObserver__ = true;
2814  }
2815  el.style.cursor = 'move';
2816  el.style.cursor = moving ? 'grabbing' : 'grab';
2817  if (swiper.isElement) {
2818    requestAnimationFrame(() => {
2819      swiper.__preventObserver__ = false;
2820    });
2821  }
2822}
2823
2824function unsetGrabCursor() {
2825  const swiper = this;
2826  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
2827    return;
2828  }
2829  if (swiper.isElement) {
2830    swiper.__preventObserver__ = true;
2831  }
2832  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';
2833  if (swiper.isElement) {
2834    requestAnimationFrame(() => {
2835      swiper.__preventObserver__ = false;
2836    });
2837  }
2838}
2839
2840var grabCursor = {
2841  setGrabCursor,
2842  unsetGrabCursor
2843};
2844
2845// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd
2846function closestElement(selector, base) {
2847  if (base === void 0) {
2848    base = this;
2849  }
2850  function __closestFrom(el) {
2851    if (!el || el === (0,ssr_window_esm.g)() || el === (0,ssr_window_esm.a)()) return null;
2852    if (el.assignedSlot) el = el.assignedSlot;
2853    const found = el.closest(selector);
2854    if (!found && !el.getRootNode) {
2855      return null;
2856    }
2857    return found || __closestFrom(el.getRootNode().host);
2858  }
2859  return __closestFrom(base);
2860}
2861function preventEdgeSwipe(swiper, event, startX) {
2862  const window = (0,ssr_window_esm.a)();
2863  const {
2864    params
2865  } = swiper;
2866  const edgeSwipeDetection = params.edgeSwipeDetection;
2867  const edgeSwipeThreshold = params.edgeSwipeThreshold;
2868  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {
2869    if (edgeSwipeDetection === 'prevent') {
2870      event.preventDefault();
2871      return true;
2872    }
2873    return false;
2874  }
2875  return true;
2876}
2877function onTouchStart(event) {
2878  const swiper = this;
2879  const document = (0,ssr_window_esm.g)();
2880  let e = event;
2881  if (e.originalEvent) e = e.originalEvent;
2882  const data = swiper.touchEventsData;
2883  if (e.type === 'pointerdown') {
2884    if (data.pointerId !== null && data.pointerId !== e.pointerId) {
2885      return;
2886    }
2887    data.pointerId = e.pointerId;
2888  } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {
2889    data.touchId = e.targetTouches[0].identifier;
2890  }
2891  if (e.type === 'touchstart') {
2892    // don't proceed touch event
2893    preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);
2894    return;
2895  }
2896  const {
2897    params,
2898    touches,
2899    enabled
2900  } = swiper;
2901  if (!enabled) return;
2902  if (!params.simulateTouch && e.pointerType === 'mouse') return;
2903  if (swiper.animating && params.preventInteractionOnTransition) {
2904    return;
2905  }
2906  if (!swiper.animating && params.cssMode && params.loop) {
2907    swiper.loopFix();
2908  }
2909  let targetEl = e.target;
2910  if (params.touchEventsTarget === 'wrapper') {
2911    if (!swiper.wrapperEl.contains(targetEl)) return;
2912  }
2913  if ('which' in e && e.which === 3) return;
2914  if ('button' in e && e.button > 0) return;
2915  if (data.isTouched && data.isMoved) return;
2916
2917  // change target el for shadow root component
2918  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';
2919  // eslint-disable-next-line
2920  const eventPath = e.composedPath ? e.composedPath() : e.path;
2921  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {
2922    targetEl = eventPath[0];
2923  }
2924  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;
2925  const isTargetShadow = !!(e.target && e.target.shadowRoot);
2926
2927  // use closestElement for shadow root element to get the actual closest for nested shadow root element
2928  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {
2929    swiper.allowClick = true;
2930    return;
2931  }
2932  if (params.swipeHandler) {
2933    if (!targetEl.closest(params.swipeHandler)) return;
2934  }
2935  touches.currentX = e.pageX;
2936  touches.currentY = e.pageY;
2937  const startX = touches.currentX;
2938  const startY = touches.currentY;
2939
2940  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
2941
2942  if (!preventEdgeSwipe(swiper, e, startX)) {
2943    return;
2944  }
2945  Object.assign(data, {
2946    isTouched: true,
2947    isMoved: false,
2948    allowTouchCallbacks: true,
2949    isScrolling: undefined,
2950    startMoving: undefined
2951  });
2952  touches.startX = startX;
2953  touches.startY = startY;
2954  data.touchStartTime = (0,utils.d)();
2955  swiper.allowClick = true;
2956  swiper.updateSize();
2957  swiper.swipeDirection = undefined;
2958  if (params.threshold > 0) data.allowThresholdMove = false;
2959  let preventDefault = true;
2960  if (targetEl.matches(data.focusableElements)) {
2961    preventDefault = false;
2962    if (targetEl.nodeName === 'SELECT') {
2963      data.isTouched = false;
2964    }
2965  }
2966  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {
2967    document.activeElement.blur();
2968  }
2969  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
2970  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {
2971    e.preventDefault();
2972  }
2973  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {
2974    swiper.freeMode.onTouchStart();
2975  }
2976  swiper.emit('touchStart', e);
2977}
2978
2979function onTouchMove(event) {
2980  const document = (0,ssr_window_esm.g)();
2981  const swiper = this;
2982  const data = swiper.touchEventsData;
2983  const {
2984    params,
2985    touches,
2986    rtlTranslate: rtl,
2987    enabled
2988  } = swiper;
2989  if (!enabled) return;
2990  if (!params.simulateTouch && event.pointerType === 'mouse') return;
2991  let e = event;
2992  if (e.originalEvent) e = e.originalEvent;
2993  if (e.type === 'pointermove') {
2994    if (data.touchId !== null) return; // return from pointer if we use touch
2995    const id = e.pointerId;
2996    if (id !== data.pointerId) return;
2997  }
2998  let targetTouch;
2999  if (e.type === 'touchmove') {
3000    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];
3001    if (!targetTouch || targetTouch.identifier !== data.touchId) return;
3002  } else {
3003    targetTouch = e;
3004  }
3005  if (!data.isTouched) {
3006    if (data.startMoving && data.isScrolling) {
3007      swiper.emit('touchMoveOpposite', e);
3008    }
3009    return;
3010  }
3011  const pageX = targetTouch.pageX;
3012  const pageY = targetTouch.pageY;
3013  if (e.preventedByNestedSwiper) {
3014    touches.startX = pageX;
3015    touches.startY = pageY;
3016    return;
3017  }
3018  if (!swiper.allowTouchMove) {
3019    if (!e.target.matches(data.focusableElements)) {
3020      swiper.allowClick = false;
3021    }
3022    if (data.isTouched) {
3023      Object.assign(touches, {
3024        startX: pageX,
3025        startY: pageY,
3026        currentX: pageX,
3027        currentY: pageY
3028      });
3029      data.touchStartTime = (0,utils.d)();
3030    }
3031    return;
3032  }
3033  if (params.touchReleaseOnEdges && !params.loop) {
3034    if (swiper.isVertical()) {
3035      // Vertical
3036      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
3037        data.isTouched = false;
3038        data.isMoved = false;
3039        return;
3040      }
3041    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
3042      return;
3043    }
3044  }
3045  if (document.activeElement) {
3046    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {
3047      data.isMoved = true;
3048      swiper.allowClick = false;
3049      return;
3050    }
3051  }
3052  if (data.allowTouchCallbacks) {
3053    swiper.emit('touchMove', e);
3054  }
3055  touches.previousX = touches.currentX;
3056  touches.previousY = touches.currentY;
3057  touches.currentX = pageX;
3058  touches.currentY = pageY;
3059  const diffX = touches.currentX - touches.startX;
3060  const diffY = touches.currentY - touches.startY;
3061  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;
3062  if (typeof data.isScrolling === 'undefined') {
3063    let touchAngle;
3064    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
3065      data.isScrolling = false;
3066    } else {
3067      // eslint-disable-next-line
3068      if (diffX * diffX + diffY * diffY >= 25) {
3069        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
3070        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
3071      }
3072    }
3073  }
3074  if (data.isScrolling) {
3075    swiper.emit('touchMoveOpposite', e);
3076  }
3077  if (typeof data.startMoving === 'undefined') {
3078    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
3079      data.startMoving = true;
3080    }
3081  }
3082  if (data.isScrolling) {
3083    data.isTouched = false;
3084    return;
3085  }
3086  if (!data.startMoving) {
3087    return;
3088  }
3089  swiper.allowClick = false;
3090  if (!params.cssMode && e.cancelable) {
3091    e.preventDefault();
3092  }
3093  if (params.touchMoveStopPropagation && !params.nested) {
3094    e.stopPropagation();
3095  }
3096  let diff = swiper.isHorizontal() ? diffX : diffY;
3097  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;
3098  if (params.oneWayMovement) {
3099    diff = Math.abs(diff) * (rtl ? 1 : -1);
3100    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);
3101  }
3102  touches.diff = diff;
3103  diff *= params.touchRatio;
3104  if (rtl) {
3105    diff = -diff;
3106    touchesDiff = -touchesDiff;
3107  }
3108  const prevTouchesDirection = swiper.touchesDirection;
3109  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
3110  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';
3111  const isLoop = swiper.params.loop && !params.cssMode;
3112  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;
3113  if (!data.isMoved) {
3114    if (isLoop && allowLoopFix) {
3115      swiper.loopFix({
3116        direction: swiper.swipeDirection
3117      });
3118    }
3119    data.startTranslate = swiper.getTranslate();
3120    swiper.setTransition(0);
3121    if (swiper.animating) {
3122      const evt = new window.CustomEvent('transitionend', {
3123        bubbles: true,
3124        cancelable: true
3125      });
3126      swiper.wrapperEl.dispatchEvent(evt);
3127    }
3128    data.allowMomentumBounce = false;
3129    // Grab Cursor
3130    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3131      swiper.setGrabCursor(true);
3132    }
3133    swiper.emit('sliderFirstMove', e);
3134  }
3135  let loopFixed;
3136  new Date().getTime();
3137  if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {
3138    Object.assign(touches, {
3139      startX: pageX,
3140      startY: pageY,
3141      currentX: pageX,
3142      currentY: pageY,
3143      startTranslate: data.currentTranslate
3144    });
3145    data.loopSwapReset = true;
3146    data.startTranslate = data.currentTranslate;
3147    return;
3148  }
3149  swiper.emit('sliderMove', e);
3150  data.isMoved = true;
3151  data.currentTranslate = diff + data.startTranslate;
3152  let disableParentSwiper = true;
3153  let resistanceRatio = params.resistanceRatio;
3154  if (params.touchReleaseOnEdges) {
3155    resistanceRatio = 0;
3156  }
3157  if (diff > 0) {
3158    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {
3159      swiper.loopFix({
3160        direction: 'prev',
3161        setTranslate: true,
3162        activeSlideIndex: 0
3163      });
3164    }
3165    if (data.currentTranslate > swiper.minTranslate()) {
3166      disableParentSwiper = false;
3167      if (params.resistance) {
3168        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;
3169      }
3170    }
3171  } else if (diff < 0) {
3172    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {
3173      swiper.loopFix({
3174        direction: 'next',
3175        setTranslate: true,
3176        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))
3177      });
3178    }
3179    if (data.currentTranslate < swiper.maxTranslate()) {
3180      disableParentSwiper = false;
3181      if (params.resistance) {
3182        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;
3183      }
3184    }
3185  }
3186  if (disableParentSwiper) {
3187    e.preventedByNestedSwiper = true;
3188  }
3189
3190  // Directions locks
3191  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
3192    data.currentTranslate = data.startTranslate;
3193  }
3194  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
3195    data.currentTranslate = data.startTranslate;
3196  }
3197  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
3198    data.currentTranslate = data.startTranslate;
3199  }
3200
3201  // Threshold
3202  if (params.threshold > 0) {
3203    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
3204      if (!data.allowThresholdMove) {
3205        data.allowThresholdMove = true;
3206        touches.startX = touches.currentX;
3207        touches.startY = touches.currentY;
3208        data.currentTranslate = data.startTranslate;
3209        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
3210        return;
3211      }
3212    } else {
3213      data.currentTranslate = data.startTranslate;
3214      return;
3215    }
3216  }
3217  if (!params.followFinger || params.cssMode) return;
3218
3219  // Update active index in free mode
3220  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {
3221    swiper.updateActiveIndex();
3222    swiper.updateSlidesClasses();
3223  }
3224  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {
3225    swiper.freeMode.onTouchMove();
3226  }
3227  // Update progress
3228  swiper.updateProgress(data.currentTranslate);
3229  // Update translate
3230  swiper.setTranslate(data.currentTranslate);
3231}
3232
3233function onTouchEnd(event) {
3234  const swiper = this;
3235  const data = swiper.touchEventsData;
3236  let e = event;
3237  if (e.originalEvent) e = e.originalEvent;
3238  let targetTouch;
3239  const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';
3240  if (!isTouchEvent) {
3241    if (data.touchId !== null) return; // return from pointer if we use touch
3242    if (e.pointerId !== data.pointerId) return;
3243    targetTouch = e;
3244  } else {
3245    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];
3246    if (!targetTouch || targetTouch.identifier !== data.touchId) return;
3247  }
3248  if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {
3249    const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);
3250    if (!proceed) {
3251      return;
3252    }
3253  }
3254  data.pointerId = null;
3255  data.touchId = null;
3256  const {
3257    params,
3258    touches,
3259    rtlTranslate: rtl,
3260    slidesGrid,
3261    enabled
3262  } = swiper;
3263  if (!enabled) return;
3264  if (!params.simulateTouch && e.pointerType === 'mouse') return;
3265  if (data.allowTouchCallbacks) {
3266    swiper.emit('touchEnd', e);
3267  }
3268  data.allowTouchCallbacks = false;
3269  if (!data.isTouched) {
3270    if (data.isMoved && params.grabCursor) {
3271      swiper.setGrabCursor(false);
3272    }
3273    data.isMoved = false;
3274    data.startMoving = false;
3275    return;
3276  }
3277
3278  // Return Grab Cursor
3279  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3280    swiper.setGrabCursor(false);
3281  }
3282
3283  // Time diff
3284  const touchEndTime = (0,utils.d)();
3285  const timeDiff = touchEndTime - data.touchStartTime;
3286
3287  // Tap, doubleTap, Click
3288  if (swiper.allowClick) {
3289    const pathTree = e.path || e.composedPath && e.composedPath();
3290    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);
3291    swiper.emit('tap click', e);
3292    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
3293      swiper.emit('doubleTap doubleClick', e);
3294    }
3295  }
3296  data.lastClickTime = (0,utils.d)();
3297  (0,utils.n)(() => {
3298    if (!swiper.destroyed) swiper.allowClick = true;
3299  });
3300  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {
3301    data.isTouched = false;
vendor: 6,188 bytes, lines 3302-3494
3302    data.isMoved = false;
3303    data.startMoving = false;
3304    return;
3305  }
3306  data.isTouched = false;
3307  data.isMoved = false;
3308  data.startMoving = false;
3309  let currentPos;
3310  if (params.followFinger) {
3311    currentPos = rtl ? swiper.translate : -swiper.translate;
3312  } else {
3313    currentPos = -data.currentTranslate;
3314  }
3315  if (params.cssMode) {
3316    return;
3317  }
3318  if (params.freeMode && params.freeMode.enabled) {
3319    swiper.freeMode.onTouchEnd({
3320      currentPos
3321    });
3322    return;
3323  }
3324
3325  // Find current slide
3326  const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;
3327  let stopIndex = 0;
3328  let groupSize = swiper.slidesSizesGrid[0];
3329  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
3330    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
3331    if (typeof slidesGrid[i + increment] !== 'undefined') {
3332      if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
3333        stopIndex = i;
3334        groupSize = slidesGrid[i + increment] - slidesGrid[i];
3335      }
3336    } else if (swipeToLast || currentPos >= slidesGrid[i]) {
3337      stopIndex = i;
3338      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
3339    }
3340  }
3341  let rewindFirstIndex = null;
3342  let rewindLastIndex = null;
3343  if (params.rewind) {
3344    if (swiper.isBeginning) {
3345      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
3346    } else if (swiper.isEnd) {
3347      rewindFirstIndex = 0;
3348    }
3349  }
3350  // Find current slide size
3351  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
3352  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
3353  if (timeDiff > params.longSwipesMs) {
3354    // Long touches
3355    if (!params.longSwipes) {
3356      swiper.slideTo(swiper.activeIndex);
3357      return;
3358    }
3359    if (swiper.swipeDirection === 'next') {
3360      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);
3361    }
3362    if (swiper.swipeDirection === 'prev') {
3363      if (ratio > 1 - params.longSwipesRatio) {
3364        swiper.slideTo(stopIndex + increment);
3365      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {
3366        swiper.slideTo(rewindLastIndex);
3367      } else {
3368        swiper.slideTo(stopIndex);
3369      }
3370    }
3371  } else {
3372    // Short swipes
3373    if (!params.shortSwipes) {
3374      swiper.slideTo(swiper.activeIndex);
3375      return;
3376    }
3377    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
3378    if (!isNavButtonTarget) {
3379      if (swiper.swipeDirection === 'next') {
3380        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);
3381      }
3382      if (swiper.swipeDirection === 'prev') {
3383        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);
3384      }
3385    } else if (e.target === swiper.navigation.nextEl) {
3386      swiper.slideTo(stopIndex + increment);
3387    } else {
3388      swiper.slideTo(stopIndex);
3389    }
3390  }
3391}
3392
3393function onResize() {
3394  const swiper = this;
3395  const {
3396    params,
3397    el
3398  } = swiper;
3399  if (el && el.offsetWidth === 0) return;
3400
3401  // Breakpoints
3402  if (params.breakpoints) {
3403    swiper.setBreakpoint();
3404  }
3405
3406  // Save locks
3407  const {
3408    allowSlideNext,
3409    allowSlidePrev,
3410    snapGrid
3411  } = swiper;
3412  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
3413
3414  // Disable locks on resize
3415  swiper.allowSlideNext = true;
3416  swiper.allowSlidePrev = true;
3417  swiper.updateSize();
3418  swiper.updateSlides();
3419  swiper.updateSlidesClasses();
3420  const isVirtualLoop = isVirtual && params.loop;
3421  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {
3422    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
3423  } else {
3424    if (swiper.params.loop && !isVirtual) {
3425      swiper.slideToLoop(swiper.realIndex, 0, false, true);
3426    } else {
3427      swiper.slideTo(swiper.activeIndex, 0, false, true);
3428    }
3429  }
3430  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
3431    clearTimeout(swiper.autoplay.resizeTimeout);
3432    swiper.autoplay.resizeTimeout = setTimeout(() => {
3433      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
3434        swiper.autoplay.resume();
3435      }
3436    }, 500);
3437  }
3438  // Return locks after resize
3439  swiper.allowSlidePrev = allowSlidePrev;
3440  swiper.allowSlideNext = allowSlideNext;
3441  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
3442    swiper.checkOverflow();
3443  }
3444}
3445
3446function onClick(e) {
3447  const swiper = this;
3448  if (!swiper.enabled) return;
3449  if (!swiper.allowClick) {
3450    if (swiper.params.preventClicks) e.preventDefault();
3451    if (swiper.params.preventClicksPropagation && swiper.animating) {
3452      e.stopPropagation();
3453      e.stopImmediatePropagation();
3454    }
3455  }
3456}
3457
3458function onScroll() {
3459  const swiper = this;
3460  const {
3461    wrapperEl,
3462    rtlTranslate,
3463    enabled
3464  } = swiper;
3465  if (!enabled) return;
3466  swiper.previousTranslate = swiper.translate;
3467  if (swiper.isHorizontal()) {
3468    swiper.translate = -wrapperEl.scrollLeft;
3469  } else {
3470    swiper.translate = -wrapperEl.scrollTop;
3471  }
3472  // eslint-disable-next-line
3473  if (swiper.translate === 0) swiper.translate = 0;
3474  swiper.updateActiveIndex();
3475  swiper.updateSlidesClasses();
3476  let newProgress;
3477  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
3478  if (translatesDiff === 0) {
3479    newProgress = 0;
3480  } else {
3481    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
3482  }
3483  if (newProgress !== swiper.progress) {
3484    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
3485  }
3486  swiper.emit('setTranslate', swiper.translate, false);
3487}
3488
3489function onLoad(e) {
3490  const swiper = this;
3491  processLazyPreloader(swiper, e.target);
3492  if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {
3493    return;
3494  }
vendor: 20,959 bytes, lines 3495-4232
3495  swiper.update();
3496}
3497
3498function onDocumentTouchStart() {
3499  const swiper = this;
3500  if (swiper.documentTouchHandlerProceeded) return;
3501  swiper.documentTouchHandlerProceeded = true;
3502  if (swiper.params.touchReleaseOnEdges) {
3503    swiper.el.style.touchAction = 'auto';
3504  }
3505}
3506
3507const events = (swiper, method) => {
3508  const document = (0,ssr_window_esm.g)();
3509  const {
3510    params,
3511    el,
3512    wrapperEl,
3513    device
3514  } = swiper;
3515  const capture = !!params.nested;
3516  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
3517  const swiperMethod = method;
3518
3519  // Touch Events
3520  document[domMethod]('touchstart', swiper.onDocumentTouchStart, {
3521    passive: false,
3522    capture
3523  });
3524  el[domMethod]('touchstart', swiper.onTouchStart, {
3525    passive: false
3526  });
3527  el[domMethod]('pointerdown', swiper.onTouchStart, {
3528    passive: false
3529  });
3530  document[domMethod]('touchmove', swiper.onTouchMove, {
3531    passive: false,
3532    capture
3533  });
3534  document[domMethod]('pointermove', swiper.onTouchMove, {
3535    passive: false,
3536    capture
3537  });
3538  document[domMethod]('touchend', swiper.onTouchEnd, {
3539    passive: true
3540  });
3541  document[domMethod]('pointerup', swiper.onTouchEnd, {
3542    passive: true
3543  });
3544  document[domMethod]('pointercancel', swiper.onTouchEnd, {
3545    passive: true
3546  });
3547  document[domMethod]('touchcancel', swiper.onTouchEnd, {
3548    passive: true
3549  });
3550  document[domMethod]('pointerout', swiper.onTouchEnd, {
3551    passive: true
3552  });
3553  document[domMethod]('pointerleave', swiper.onTouchEnd, {
3554    passive: true
3555  });
3556  document[domMethod]('contextmenu', swiper.onTouchEnd, {
3557    passive: true
3558  });
3559
3560  // Prevent Links Clicks
3561  if (params.preventClicks || params.preventClicksPropagation) {
3562    el[domMethod]('click', swiper.onClick, true);
3563  }
3564  if (params.cssMode) {
3565    wrapperEl[domMethod]('scroll', swiper.onScroll);
3566  }
3567
3568  // Resize handler
3569  if (params.updateOnWindowResize) {
3570    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
3571  } else {
3572    swiper[swiperMethod]('observerUpdate', onResize, true);
3573  }
3574
3575  // Images loader
3576  el[domMethod]('load', swiper.onLoad, {
3577    capture: true
3578  });
3579};
3580function attachEvents() {
3581  const swiper = this;
3582  const {
3583    params
3584  } = swiper;
3585  swiper.onTouchStart = onTouchStart.bind(swiper);
3586  swiper.onTouchMove = onTouchMove.bind(swiper);
3587  swiper.onTouchEnd = onTouchEnd.bind(swiper);
3588  swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);
3589  if (params.cssMode) {
3590    swiper.onScroll = onScroll.bind(swiper);
3591  }
3592  swiper.onClick = onClick.bind(swiper);
3593  swiper.onLoad = onLoad.bind(swiper);
3594  events(swiper, 'on');
3595}
3596function detachEvents() {
3597  const swiper = this;
3598  events(swiper, 'off');
3599}
3600var events$1 = {
3601  attachEvents,
3602  detachEvents
3603};
3604
3605const isGridEnabled = (swiper, params) => {
3606  return swiper.grid && params.grid && params.grid.rows > 1;
3607};
3608function setBreakpoint() {
3609  const swiper = this;
3610  const {
3611    realIndex,
3612    initialized,
3613    params,
3614    el
3615  } = swiper;
3616  const breakpoints = params.breakpoints;
3617  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;
3618
3619  // Get breakpoint for window width and update parameters
3620  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);
3621  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;
3622  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
3623  const breakpointParams = breakpointOnlyParams || swiper.originalParams;
3624  const wasMultiRow = isGridEnabled(swiper, params);
3625  const isMultiRow = isGridEnabled(swiper, breakpointParams);
3626  const wasEnabled = params.enabled;
3627  if (wasMultiRow && !isMultiRow) {
3628    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
3629    swiper.emitContainerClasses();
3630  } else if (!wasMultiRow && isMultiRow) {
3631    el.classList.add(`${params.containerModifierClass}grid`);
3632    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {
3633      el.classList.add(`${params.containerModifierClass}grid-column`);
3634    }
3635    swiper.emitContainerClasses();
3636  }
3637
3638  // Toggle navigation, pagination, scrollbar
3639  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {
3640    if (typeof breakpointParams[prop] === 'undefined') return;
3641    const wasModuleEnabled = params[prop] && params[prop].enabled;
3642    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;
3643    if (wasModuleEnabled && !isModuleEnabled) {
3644      swiper[prop].disable();
3645    }
3646    if (!wasModuleEnabled && isModuleEnabled) {
3647      swiper[prop].enable();
3648    }
3649  });
3650  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
3651  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
3652  const wasLoop = params.loop;
3653  if (directionChanged && initialized) {
3654    swiper.changeDirection();
3655  }
3656  (0,utils.t)(swiper.params, breakpointParams);
3657  const isEnabled = swiper.params.enabled;
3658  const hasLoop = swiper.params.loop;
3659  Object.assign(swiper, {
3660    allowTouchMove: swiper.params.allowTouchMove,
3661    allowSlideNext: swiper.params.allowSlideNext,
3662    allowSlidePrev: swiper.params.allowSlidePrev
3663  });
3664  if (wasEnabled && !isEnabled) {
3665    swiper.disable();
3666  } else if (!wasEnabled && isEnabled) {
3667    swiper.enable();
3668  }
3669  swiper.currentBreakpoint = breakpoint;
3670  swiper.emit('_beforeBreakpoint', breakpointParams);
3671  if (initialized) {
3672    if (needsReLoop) {
3673      swiper.loopDestroy();
3674      swiper.loopCreate(realIndex);
3675      swiper.updateSlides();
3676    } else if (!wasLoop && hasLoop) {
3677      swiper.loopCreate(realIndex);
3678      swiper.updateSlides();
3679    } else if (wasLoop && !hasLoop) {
3680      swiper.loopDestroy();
3681    }
3682  }
3683  swiper.emit('breakpoint', breakpointParams);
3684}
3685
3686function getBreakpoint(breakpoints, base, containerEl) {
3687  if (base === void 0) {
3688    base = 'window';
3689  }
3690  if (!breakpoints || base === 'container' && !containerEl) return undefined;
3691  let breakpoint = false;
3692  const window = (0,ssr_window_esm.a)();
3693  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
3694  const points = Object.keys(breakpoints).map(point => {
3695    if (typeof point === 'string' && point.indexOf('@') === 0) {
3696      const minRatio = parseFloat(point.substr(1));
3697      const value = currentHeight * minRatio;
3698      return {
3699        value,
3700        point
3701      };
3702    }
3703    return {
3704      value: point,
3705      point
3706    };
3707  });
3708  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
3709  for (let i = 0; i < points.length; i += 1) {
3710    const {
3711      point,
3712      value
3713    } = points[i];
3714    if (base === 'window') {
3715      if (window.matchMedia(`(min-width: ${value}px)`).matches) {
3716        breakpoint = point;
3717      }
3718    } else if (value <= containerEl.clientWidth) {
3719      breakpoint = point;
3720    }
3721  }
3722  return breakpoint || 'max';
3723}
3724
3725var breakpoints = {
3726  setBreakpoint,
3727  getBreakpoint
3728};
3729
3730function prepareClasses(entries, prefix) {
3731  const resultClasses = [];
3732  entries.forEach(item => {
3733    if (typeof item === 'object') {
3734      Object.keys(item).forEach(classNames => {
3735        if (item[classNames]) {
3736          resultClasses.push(prefix + classNames);
3737        }
3738      });
3739    } else if (typeof item === 'string') {
3740      resultClasses.push(prefix + item);
3741    }
3742  });
3743  return resultClasses;
3744}
3745function addClasses() {
3746  const swiper = this;
3747  const {
3748    classNames,
3749    params,
3750    rtl,
3751    el,
3752    device
3753  } = swiper;
3754  // prettier-ignore
3755  const suffixes = prepareClasses(['initialized', params.direction, {
3756    'free-mode': swiper.params.freeMode && params.freeMode.enabled
3757  }, {
3758    'autoheight': params.autoHeight
3759  }, {
3760    'rtl': rtl
3761  }, {
3762    'grid': params.grid && params.grid.rows > 1
3763  }, {
3764    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'
3765  }, {
3766    'android': device.android
3767  }, {
3768    'ios': device.ios
3769  }, {
3770    'css-mode': params.cssMode
3771  }, {
3772    'centered': params.cssMode && params.centeredSlides
3773  }, {
3774    'watch-progress': params.watchSlidesProgress
3775  }], params.containerModifierClass);
3776  classNames.push(...suffixes);
3777  el.classList.add(...classNames);
3778  swiper.emitContainerClasses();
3779}
3780
3781function removeClasses() {
3782  const swiper = this;
3783  const {
3784    el,
3785    classNames
3786  } = swiper;
3787  el.classList.remove(...classNames);
3788  swiper.emitContainerClasses();
3789}
3790
3791var classes = {
3792  addClasses,
3793  removeClasses
3794};
3795
3796function checkOverflow() {
3797  const swiper = this;
3798  const {
3799    isLocked: wasLocked,
3800    params
3801  } = swiper;
3802  const {
3803    slidesOffsetBefore
3804  } = params;
3805  if (slidesOffsetBefore) {
3806    const lastSlideIndex = swiper.slides.length - 1;
3807    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;
3808    swiper.isLocked = swiper.size > lastSlideRightEdge;
3809  } else {
3810    swiper.isLocked = swiper.snapGrid.length === 1;
3811  }
3812  if (params.allowSlideNext === true) {
3813    swiper.allowSlideNext = !swiper.isLocked;
3814  }
3815  if (params.allowSlidePrev === true) {
3816    swiper.allowSlidePrev = !swiper.isLocked;
3817  }
3818  if (wasLocked && wasLocked !== swiper.isLocked) {
3819    swiper.isEnd = false;
3820  }
3821  if (wasLocked !== swiper.isLocked) {
3822    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
3823  }
3824}
3825var checkOverflow$1 = {
3826  checkOverflow
3827};
3828
3829var defaults = {
3830  init: true,
3831  direction: 'horizontal',
3832  oneWayMovement: false,
3833  touchEventsTarget: 'wrapper',
3834  initialSlide: 0,
3835  speed: 300,
3836  cssMode: false,
3837  updateOnWindowResize: true,
3838  resizeObserver: true,
3839  nested: false,
3840  createElements: false,
3841  eventsPrefix: 'swiper',
3842  enabled: true,
3843  focusableElements: 'input, select, option, textarea, button, video, label',
3844  // Overrides
3845  width: null,
3846  height: null,
3847  //
3848  preventInteractionOnTransition: false,
3849  // ssr
3850  userAgent: null,
3851  url: null,
3852  // To support iOS's swipe-to-go-back gesture (when being used in-app).
3853  edgeSwipeDetection: false,
3854  edgeSwipeThreshold: 20,
3855  // Autoheight
3856  autoHeight: false,
3857  // Set wrapper width
3858  setWrapperSize: false,
3859  // Virtual Translate
3860  virtualTranslate: false,
3861  // Effects
3862  effect: 'slide',
3863  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
3864
3865  // Breakpoints
3866  breakpoints: undefined,
3867  breakpointsBase: 'window',
3868  // Slides grid
3869  spaceBetween: 0,
3870  slidesPerView: 1,
3871  slidesPerGroup: 1,
3872  slidesPerGroupSkip: 0,
3873  slidesPerGroupAuto: false,
3874  centeredSlides: false,
3875  centeredSlidesBounds: false,
3876  slidesOffsetBefore: 0,
3877  // in px
3878  slidesOffsetAfter: 0,
3879  // in px
3880  normalizeSlideIndex: true,
3881  centerInsufficientSlides: false,
3882  // Disable swiper and hide navigation when container not overflow
3883  watchOverflow: true,
3884  // Round length
3885  roundLengths: false,
3886  // Touches
3887  touchRatio: 1,
3888  touchAngle: 45,
3889  simulateTouch: true,
3890  shortSwipes: true,
3891  longSwipes: true,
3892  longSwipesRatio: 0.5,
3893  longSwipesMs: 300,
3894  followFinger: true,
3895  allowTouchMove: true,
3896  threshold: 5,
3897  touchMoveStopPropagation: false,
3898  touchStartPreventDefault: true,
3899  touchStartForcePreventDefault: false,
3900  touchReleaseOnEdges: false,
3901  // Unique Navigation Elements
3902  uniqueNavElements: true,
3903  // Resistance
3904  resistance: true,
3905  resistanceRatio: 0.85,
3906  // Progress
3907  watchSlidesProgress: false,
3908  // Cursor
3909  grabCursor: false,
3910  // Clicks
3911  preventClicks: true,
3912  preventClicksPropagation: true,
3913  slideToClickedSlide: false,
3914  // loop
3915  loop: false,
3916  loopAddBlankSlides: true,
3917  loopAdditionalSlides: 0,
3918  loopPreventsSliding: true,
3919  // rewind
3920  rewind: false,
3921  // Swiping/no swiping
3922  allowSlidePrev: true,
3923  allowSlideNext: true,
3924  swipeHandler: null,
3925  // '.swipe-handler',
3926  noSwiping: true,
3927  noSwipingClass: 'swiper-no-swiping',
3928  noSwipingSelector: null,
3929  // Passive Listeners
3930  passiveListeners: true,
3931  maxBackfaceHiddenSlides: 10,
3932  // NS
3933  containerModifierClass: 'swiper-',
3934  // NEW
3935  slideClass: 'swiper-slide',
3936  slideBlankClass: 'swiper-slide-blank',
3937  slideActiveClass: 'swiper-slide-active',
3938  slideVisibleClass: 'swiper-slide-visible',
3939  slideFullyVisibleClass: 'swiper-slide-fully-visible',
3940  slideNextClass: 'swiper-slide-next',
3941  slidePrevClass: 'swiper-slide-prev',
3942  wrapperClass: 'swiper-wrapper',
3943  lazyPreloaderClass: 'swiper-lazy-preloader',
3944  lazyPreloadPrevNext: 0,
3945  // Callbacks
3946  runCallbacksOnInit: true,
3947  // Internals
3948  _emitClasses: false
3949};
3950
3951function moduleExtendParams(params, allModulesParams) {
3952  return function extendParams(obj) {
3953    if (obj === void 0) {
3954      obj = {};
3955    }
3956    const moduleParamName = Object.keys(obj)[0];
3957    const moduleParams = obj[moduleParamName];
3958    if (typeof moduleParams !== 'object' || moduleParams === null) {
3959      (0,utils.t)(allModulesParams, obj);
3960      return;
3961    }
3962    if (params[moduleParamName] === true) {
3963      params[moduleParamName] = {
3964        enabled: true
3965      };
3966    }
3967    if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {
3968      params[moduleParamName].auto = true;
3969    }
3970    if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {
3971      params[moduleParamName].auto = true;
3972    }
3973    if (!(moduleParamName in params && 'enabled' in moduleParams)) {
3974      (0,utils.t)(allModulesParams, obj);
3975      return;
3976    }
3977    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {
3978      params[moduleParamName].enabled = true;
3979    }
3980    if (!params[moduleParamName]) params[moduleParamName] = {
3981      enabled: false
3982    };
3983    (0,utils.t)(allModulesParams, obj);
3984  };
3985}
3986
3987/* eslint no-param-reassign: "off" */
3988const prototypes = {
3989  eventsEmitter,
3990  update,
3991  translate,
3992  transition,
3993  slide,
3994  loop,
3995  grabCursor,
3996  events: events$1,
3997  breakpoints,
3998  checkOverflow: checkOverflow$1,
3999  classes
4000};
4001const extendedDefaults = {};
4002class Swiper {
4003  constructor() {
4004    let el;
4005    let params;
4006    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
4007      args[_key] = arguments[_key];
4008    }
4009    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {
4010      params = args[0];
4011    } else {
4012      [el, params] = args;
4013    }
4014    if (!params) params = {};
4015    params = (0,utils.t)({}, params);
4016    if (el && !params.el) params.el = el;
4017    const document = (0,ssr_window_esm.g)();
4018    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {
4019      const swipers = [];
4020      document.querySelectorAll(params.el).forEach(containerEl => {
4021        const newParams = (0,utils.t)({}, params, {
4022          el: containerEl
4023        });
4024        swipers.push(new Swiper(newParams));
4025      });
4026      // eslint-disable-next-line no-constructor-return
4027      return swipers;
4028    }
4029
4030    // Swiper Instance
4031    const swiper = this;
4032    swiper.__swiper__ = true;
4033    swiper.support = getSupport();
4034    swiper.device = getDevice({
4035      userAgent: params.userAgent
4036    });
4037    swiper.browser = getBrowser();
4038    swiper.eventsListeners = {};
4039    swiper.eventsAnyListeners = [];
4040    swiper.modules = [...swiper.__modules__];
4041    if (params.modules && Array.isArray(params.modules)) {
4042      swiper.modules.push(...params.modules);
4043    }
4044    const allModulesParams = {};
4045    swiper.modules.forEach(mod => {
4046      mod({
4047        params,
4048        swiper,
4049        extendParams: moduleExtendParams(params, allModulesParams),
4050        on: swiper.on.bind(swiper),
4051        once: swiper.once.bind(swiper),
4052        off: swiper.off.bind(swiper),
4053        emit: swiper.emit.bind(swiper)
4054      });
4055    });
4056
4057    // Extend defaults with modules params
4058    const swiperParams = (0,utils.t)({}, defaults, allModulesParams);
4059
4060    // Extend defaults with passed params
4061    swiper.params = (0,utils.t)({}, swiperParams, extendedDefaults, params);
4062    swiper.originalParams = (0,utils.t)({}, swiper.params);
4063    swiper.passedParams = (0,utils.t)({}, params);
4064
4065    // add event listeners
4066    if (swiper.params && swiper.params.on) {
4067      Object.keys(swiper.params.on).forEach(eventName => {
4068        swiper.on(eventName, swiper.params.on[eventName]);
4069      });
4070    }
4071    if (swiper.params && swiper.params.onAny) {
4072      swiper.onAny(swiper.params.onAny);
4073    }
4074
4075    // Extend Swiper
4076    Object.assign(swiper, {
4077      enabled: swiper.params.enabled,
4078      el,
4079      // Classes
4080      classNames: [],
4081      // Slides
4082      slides: [],
4083      slidesGrid: [],
4084      snapGrid: [],
4085      slidesSizesGrid: [],
4086      // isDirection
4087      isHorizontal() {
4088        return swiper.params.direction === 'horizontal';
4089      },
4090      isVertical() {
4091        return swiper.params.direction === 'vertical';
4092      },
4093      // Indexes
4094      activeIndex: 0,
4095      realIndex: 0,
4096      //
4097      isBeginning: true,
4098      isEnd: false,
4099      // Props
4100      translate: 0,
4101      previousTranslate: 0,
4102      progress: 0,
4103      velocity: 0,
4104      animating: false,
4105      cssOverflowAdjustment() {
4106        // Returns 0 unless `translate` is > 2**23
4107        // Should be subtracted from css values to prevent overflow
4108        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;
4109      },
4110      // Locks
4111      allowSlideNext: swiper.params.allowSlideNext,
4112      allowSlidePrev: swiper.params.allowSlidePrev,
4113      // Touch Events
4114      touchEventsData: {
4115        isTouched: undefined,
4116        isMoved: undefined,
4117        allowTouchCallbacks: undefined,
4118        touchStartTime: undefined,
4119        isScrolling: undefined,
4120        currentTranslate: undefined,
4121        startTranslate: undefined,
4122        allowThresholdMove: undefined,
4123        // Form elements to match
4124        focusableElements: swiper.params.focusableElements,
4125        // Last click time
4126        lastClickTime: 0,
4127        clickTimeout: undefined,
4128        // Velocities
4129        velocities: [],
4130        allowMomentumBounce: undefined,
4131        startMoving: undefined,
4132        pointerId: null,
4133        touchId: null
4134      },
4135      // Clicks
4136      allowClick: true,
4137      // Touches
4138      allowTouchMove: swiper.params.allowTouchMove,
4139      touches: {
4140        startX: 0,
4141        startY: 0,
4142        currentX: 0,
4143        currentY: 0,
4144        diff: 0
4145      },
4146      // Images
4147      imagesToLoad: [],
4148      imagesLoaded: 0
4149    });
4150    swiper.emit('_swiper');
4151
4152    // Init
4153    if (swiper.params.init) {
4154      swiper.init();
4155    }
4156
4157    // Return app instance
4158    // eslint-disable-next-line no-constructor-return
4159    return swiper;
4160  }
4161  getDirectionLabel(property) {
4162    if (this.isHorizontal()) {
4163      return property;
4164    }
4165    // prettier-ignore
4166    return {
4167      'width': 'height',
4168      'margin-top': 'margin-left',
4169      'margin-bottom ': 'margin-right',
4170      'margin-left': 'margin-top',
4171      'margin-right': 'margin-bottom',
4172      'padding-left': 'padding-top',
4173      'padding-right': 'padding-bottom',
4174      'marginRight': 'marginBottom'
4175    }[property];
4176  }
4177  getSlideIndex(slideEl) {
4178    const {
4179      slidesEl,
4180      params
4181    } = this;
4182    const slides = (0,utils.e)(slidesEl, `.${params.slideClass}, swiper-slide`);
4183    const firstSlideIndex = (0,utils.g)(slides[0]);
4184    return (0,utils.g)(slideEl) - firstSlideIndex;
4185  }
4186  getSlideIndexByData(index) {
4187    return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);
4188  }
4189  recalcSlides() {
4190    const swiper = this;
4191    const {
4192      slidesEl,
4193      params
4194    } = swiper;
4195    swiper.slides = (0,utils.e)(slidesEl, `.${params.slideClass}, swiper-slide`);
4196  }
4197  enable() {
4198    const swiper = this;
4199    if (swiper.enabled) return;
4200    swiper.enabled = true;
4201    if (swiper.params.grabCursor) {
4202      swiper.setGrabCursor();
4203    }
4204    swiper.emit('enable');
4205  }
4206  disable() {
4207    const swiper = this;
4208    if (!swiper.enabled) return;
4209    swiper.enabled = false;
4210    if (swiper.params.grabCursor) {
4211      swiper.unsetGrabCursor();
4212    }
4213    swiper.emit('disable');
4214  }
4215  setProgress(progress, speed) {
4216    const swiper = this;
4217    progress = Math.min(Math.max(progress, 0), 1);
4218    const min = swiper.minTranslate();
4219    const max = swiper.maxTranslate();
4220    const current = (max - min) * progress + min;
4221    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);
4222    swiper.updateActiveIndex();
4223    swiper.updateSlidesClasses();
4224  }
4225  emitContainerClasses() {
4226    const swiper = this;
4227    if (!swiper.params._emitClasses || !swiper.el) return;
4228    const cls = swiper.el.className.split(' ').filter(className => {
4229      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
4230    });
4231    swiper.emit('_containerClasses', cls.join(' '));
4232  }
vendor: 1,389 bytes, lines 4233-4277
4233  getSlideClasses(slideEl) {
4234    const swiper = this;
4235    if (swiper.destroyed) return '';
4236    return slideEl.className.split(' ').filter(className => {
4237      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;
4238    }).join(' ');
4239  }
4240  emitSlidesClasses() {
4241    const swiper = this;
4242    if (!swiper.params._emitClasses || !swiper.el) return;
4243    const updates = [];
4244    swiper.slides.forEach(slideEl => {
4245      const classNames = swiper.getSlideClasses(slideEl);
4246      updates.push({
4247        slideEl,
4248        classNames
4249      });
4250      swiper.emit('_slideClass', slideEl, classNames);
4251    });
4252    swiper.emit('_slideClasses', updates);
4253  }
4254  slidesPerViewDynamic(view, exact) {
4255    if (view === void 0) {
4256      view = 'current';
4257    }
4258    if (exact === void 0) {
4259      exact = false;
4260    }
4261    const swiper = this;
4262    const {
4263      params,
4264      slides,
4265      slidesGrid,
4266      slidesSizesGrid,
4267      size: swiperSize,
4268      activeIndex
4269    } = swiper;
4270    let spv = 1;
4271    if (typeof params.slidesPerView === 'number') return params.slidesPerView;
4272    if (params.centeredSlides) {
4273      let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;
4274      let breakLoop;
4275      for (let i = activeIndex + 1; i < slides.length; i += 1) {
4276        if (slides[i] && !breakLoop) {
4277          slideSize += slides[i].swiperSlideSize
vendor: 4,573 bytes, lines 4277-4414
4277;
4278          spv += 1;
4279          if (slideSize > swiperSize) breakLoop = true;
4280        }
4281      }
4282      for (let i = activeIndex - 1; i >= 0; i -= 1) {
4283        if (slides[i] && !breakLoop) {
4284          slideSize += slides[i].swiperSlideSize;
4285          spv += 1;
4286          if (slideSize > swiperSize) breakLoop = true;
4287        }
4288      }
4289    } else {
4290      // eslint-disable-next-line
4291      if (view === 'current') {
4292        for (let i = activeIndex + 1; i < slides.length; i += 1) {
4293          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;
4294          if (slideInView) {
4295            spv += 1;
4296          }
4297        }
4298      } else {
4299        // previous
4300        for (let i = activeIndex - 1; i >= 0; i -= 1) {
4301          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;
4302          if (slideInView) {
4303            spv += 1;
4304          }
4305        }
4306      }
4307    }
4308    return spv;
4309  }
4310  update() {
4311    const swiper = this;
4312    if (!swiper || swiper.destroyed) return;
4313    const {
4314      snapGrid,
4315      params
4316    } = swiper;
4317    // Breakpoints
4318    if (params.breakpoints) {
4319      swiper.setBreakpoint();
4320    }
4321    [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => {
4322      if (imageEl.complete) {
4323        processLazyPreloader(swiper, imageEl);
4324      }
4325    });
4326    swiper.updateSize();
4327    swiper.updateSlides();
4328    swiper.updateProgress();
4329    swiper.updateSlidesClasses();
4330    function setTranslate() {
4331      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
4332      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
4333      swiper.setTranslate(newTranslate);
4334      swiper.updateActiveIndex();
4335      swiper.updateSlidesClasses();
4336    }
4337    let translated;
4338    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {
4339      setTranslate();
4340      if (params.autoHeight) {
4341        swiper.updateAutoHeight();
4342      }
4343    } else {
4344      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {
4345        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;
4346        translated = swiper.slideTo(slides.length - 1, 0, false, true);
4347      } else {
4348        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
4349      }
4350      if (!translated) {
4351        setTranslate();
4352      }
4353    }
4354    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
4355      swiper.checkOverflow();
4356    }
4357    swiper.emit('update');
4358  }
4359  changeDirection(newDirection, needUpdate) {
4360    if (needUpdate === void 0) {
4361      needUpdate = true;
4362    }
4363    const swiper = this;
4364    const currentDirection = swiper.params.direction;
4365    if (!newDirection) {
4366      // eslint-disable-next-line
4367      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
4368    }
4369    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
4370      return swiper;
4371    }
4372    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);
4373    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);
4374    swiper.emitContainerClasses();
4375    swiper.params.direction = newDirection;
4376    swiper.slides.forEach(slideEl => {
4377      if (newDirection === 'vertical') {
4378        slideEl.style.width = '';
4379      } else {
4380        slideEl.style.height = '';
4381      }
4382    });
4383    swiper.emit('changeDirection');
4384    if (needUpdate) swiper.update();
4385    return swiper;
4386  }
4387  changeLanguageDirection(direction) {
4388    const swiper = this;
4389    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;
4390    swiper.rtl = direction === 'rtl';
4391    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;
4392    if (swiper.rtl) {
4393      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);
4394      swiper.el.dir = 'rtl';
4395    } else {
4396      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);
4397      swiper.el.dir = 'ltr';
4398    }
4399    swiper.update();
4400  }
4401  mount(element) {
4402    const swiper = this;
4403    if (swiper.mounted) return true;
4404
4405    // Find el
4406    let el = element || swiper.params.el;
4407    if (typeof el === 'string') {
4408      el = document.querySelector(el);
4409    }
4410    if (!el) {
4411      return false;
4412    }
4413    el.swiper = swiper;
4414    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === 
vendor: 744 bytes, lines 4414-4433
4414'SWIPER-CONTAINER') {
4415      swiper.isElement = true;
4416    }
4417    const getWrapperSelector = () => {
4418      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;
4419    };
4420    const getWrapper = () => {
4421      if (el && el.shadowRoot && el.shadowRoot.querySelector) {
4422        const res = el.shadowRoot.querySelector(getWrapperSelector());
4423        // Children needs to return slot items
4424        return res;
4425      }
4426      return (0,utils.e)(el, getWrapperSelector())[0];
4427    };
4428    // Find Wrapper
4429    let wrapperEl = getWrapper();
4430    if (!wrapperEl && swiper.params.createElements) {
4431      wrapperEl = (0,utils.c)('div', swiper.params.wrapperClass);
4432      el.append(wrapperEl);
4433      (0,utils.e)(el, `.${swiper.params.slideClass}
4433`).forEach(slideEl => {
4434        wrapperEl.append(slideEl);
4435      });
4436    }
4437    Object.assign(swiper, {
4438      el,
4439      wrapperEl,
4440      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,
4441      hostEl: swiper.isElement ? el.parentNode.host : el,
4442      mounted: true,
4443      // RTL
4444      rtl: el.dir.toLowerCase() === 'rtl' || (0,utils.m)(el, 'direction') === 'rtl',
4445      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || (0,utils.m)(el, 'direction') === 'rtl'),
4446      wrongRTL: (0,utils.m)(wrapperEl, 'display') === '-webkit-box'
4447    });
4448    return true;
4449  }
4450  init(el) {
4451    const swiper = this;
4452    if (swiper.initialized) return swiper;
4453    const mounted = swiper.mount(el);
4454    if (mounted === false) return swiper;
4455    swiper.emit('beforeInit');
4456
4457    // Set breakpoint
4458    if (swiper.params.breakpoints) {
4459      swiper.setBreakpoint();
4460    }
4461
4462    // Add Classes
4463    swiper.addClasses();
4464
4465    // Update size
4466    swiper.updateSize();
4467
4468    // Update slides
4469    swiper.updateSlides();
4470    if (swiper.params.watchOverflow) {
4471      swiper.checkOverflow();
4472    }
4473
4474    // Set Grab Cursor
4475    if (swiper.params.grabCursor && swiper.enabled) {
4476      swiper.setGrabCursor();
4477    }
4478
4479    // Slide To Initial Slide
4480    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
4481      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);
4482    } else {
4483      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
4484    }
4485
4486    // Create loop
4487    if (swiper.params.loop) {
4488      swiper.loopCreate();
4489    }
4490
4491    // Attach events
4492    swiper.attachEvents();
4493    const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')];
4494    if (swiper.isElement) {
4495      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]'));
4496    }
4497    lazyElements.forEach(imageEl => {
4498      if (imageEl.complete) {
4499        processLazyPreloader(swiper, imageEl);
4500      } else {
4501        imageEl.addEventListener('load', e => {
4502          processLazyPreloader(swiper, e.target);
4503        });
4504      }
4505    });
4506    preload(swiper);
4507
4508    // Init Flag
4509    swiper.initialized = true;
4510    preload(swiper);
4511
4512    // Emit
4513    swiper.emit('init');
4514    swiper.emit('afterInit');
4515    return swiper;
4516  }
4517  destroy(deleteInstance, cleanStyles) {
4518    if (deleteInstance === void 0) {
4519      deleteInstance = true;
4520    }
4521    if (cleanStyles === void 0) {
4522      cleanStyles = true;
4523    }
4524    const swiper = this;
4525    const {
4526      params,
4527      el,
4528      wrapperEl,
4529      slides
4530    } = swiper;
4531    if (typeof swiper.params === 'undefined' || swiper.destroyed) {
4532      return null;
4533    }
4534    swiper.emit('beforeDestroy');
4535
4536    // Init Flag
4537    swiper.initialized = false;
4538
4539    // Detach events
4540    swiper.detachEvents();
4541
4542    // Destroy loop
4543    if (params.loop) {
4544      swiper.loopDestroy();
4545    }
4546
4547    // Cleanup styles
4548    if (cleanStyles) {
4549      swiper.removeClasses();
4550      el.removeAttribute('style');
4551      wrapperEl.removeAttribute('style');
4552      if (slides && slides.length) {
vendor: 21,866 bytes, lines 4553-5177
4553        slides.forEach(slideEl => {
4554          slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
4555          slideEl.removeAttribute('style');
4556          slideEl.removeAttribute('data-swiper-slide-index');
4557        });
4558      }
4559    }
4560    swiper.emit('destroy');
4561
4562    // Detach emitter events
4563    Object.keys(swiper.eventsListeners).forEach(eventName => {
4564      swiper.off(eventName);
4565    });
4566    if (deleteInstance !== false) {
4567      swiper.el.swiper = null;
4568      (0,utils.u)(swiper);
4569    }
4570    swiper.destroyed = true;
4571    return null;
4572  }
4573  static extendDefaults(newDefaults) {
4574    (0,utils.t)(extendedDefaults, newDefaults);
4575  }
4576  static get extendedDefaults() {
4577    return extendedDefaults;
4578  }
4579  static get defaults() {
4580    return defaults;
4581  }
4582  static installModule(mod) {
4583    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];
4584    const modules = Swiper.prototype.__modules__;
4585    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {
4586      modules.push(mod);
4587    }
4588  }
4589  static use(module) {
4590    if (Array.isArray(module)) {
4591      module.forEach(m => Swiper.installModule(m));
4592      return Swiper;
4593    }
4594    Swiper.installModule(module);
4595    return Swiper;
4596  }
4597}
4598Object.keys(prototypes).forEach(prototypeGroup => {
4599  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {
4600    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
4601  });
4602});
4603Swiper.use([Resize, Observer]);
4604
4605
4606
4607;// CONCATENATED MODULE: ./node_modules/swiper/shared/update-swiper.mjs
4608/* underscore in name -> watch for changes */
4609const paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',
4610// modules
4611'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];
4612
4613function isObject(o) {
4614  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;
4615}
4616function extend(target, src) {
4617  const noExtend = ['__proto__', 'constructor', 'prototype'];
4618  Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {
4619    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
4620      if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);
4621    } else {
4622      target[key] = src[key];
4623    }
4624  });
4625}
4626function needsNavigation(params) {
4627  if (params === void 0) {
4628    params = {};
4629  }
4630  return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';
4631}
4632function needsPagination(params) {
4633  if (params === void 0) {
4634    params = {};
4635  }
4636  return params.pagination && typeof params.pagination.el === 'undefined';
4637}
4638function needsScrollbar(params) {
4639  if (params === void 0) {
4640    params = {};
4641  }
4642  return params.scrollbar && typeof params.scrollbar.el === 'undefined';
4643}
4644function uniqueClasses(classNames) {
4645  if (classNames === void 0) {
4646    classNames = '';
4647  }
4648  const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);
4649  const unique = [];
4650  classes.forEach(c => {
4651    if (unique.indexOf(c) < 0) unique.push(c);
4652  });
4653  return unique.join(' ');
4654}
4655function attrToProp(attrName) {
4656  if (attrName === void 0) {
4657    attrName = '';
4658  }
4659  return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));
4660}
4661function wrapperClass(className) {
4662  if (className === void 0) {
4663    className = '';
4664  }
4665  if (!className) return 'swiper-wrapper';
4666  if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;
4667  return className;
4668}
4669
4670function updateSwiper(_ref) {
4671  let {
4672    swiper,
4673    slides,
4674    passedParams,
4675    changedParams,
4676    nextEl,
4677    prevEl,
4678    scrollbarEl,
4679    paginationEl
4680  } = _ref;
4681  const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');
4682  const {
4683    params: currentParams,
4684    pagination,
4685    navigation,
4686    scrollbar,
4687    virtual,
4688    thumbs
4689  } = swiper;
4690  let needThumbsInit;
4691  let needControllerInit;
4692  let needPaginationInit;
4693  let needScrollbarInit;
4694  let needNavigationInit;
4695  let loopNeedDestroy;
4696  let loopNeedEnable;
4697  let loopNeedReloop;
4698  if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {
4699    needThumbsInit = true;
4700  }
4701  if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {
4702    needControllerInit = true;
4703  }
4704  if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {
4705    needPaginationInit = true;
4706  }
4707  if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {
4708    needScrollbarInit = true;
4709  }
4710  if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {
4711    needNavigationInit = true;
4712  }
4713  const destroyModule = mod => {
4714    if (!swiper[mod]) return;
4715    swiper[mod].destroy();
4716    if (mod === 'navigation') {
4717      if (swiper.isElement) {
4718        swiper[mod].prevEl.remove();
4719        swiper[mod].nextEl.remove();
4720      }
4721      currentParams[mod].prevEl = undefined;
4722      currentParams[mod].nextEl = undefined;
4723      swiper[mod].prevEl = undefined;
4724      swiper[mod].nextEl = undefined;
4725    } else {
4726      if (swiper.isElement) {
4727        swiper[mod].el.remove();
4728      }
4729      currentParams[mod].el = undefined;
4730      swiper[mod].el = undefined;
4731    }
4732  };
4733  if (changedParams.includes('loop') && swiper.isElement) {
4734    if (currentParams.loop && !passedParams.loop) {
4735      loopNeedDestroy = true;
4736    } else if (!currentParams.loop && passedParams.loop) {
4737      loopNeedEnable = true;
4738    } else {
4739      loopNeedReloop = true;
4740    }
4741  }
4742  updateParams.forEach(key => {
4743    if (isObject(currentParams[key]) && isObject(passedParams[key])) {
4744      Object.assign(currentParams[key], passedParams[key]);
4745      if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {
4746        destroyModule(key);
4747      }
4748    } else {
4749      const newValue = passedParams[key];
4750      if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {
4751        if (newValue === false) {
4752          destroyModule(key);
4753        }
4754      } else {
4755        currentParams[key] = passedParams[key];
4756      }
4757    }
4758  });
4759  if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {
4760    swiper.controller.control = currentParams.controller.control;
4761  }
4762  if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {
4763    virtual.slides = slides;
4764    virtual.update(true);
4765  } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {
4766    if (slides) virtual.slides = slides;
4767    virtual.update(true);
4768  }
4769  if (changedParams.includes('children') && slides && currentParams.loop) {
4770    loopNeedReloop = true;
4771  }
4772  if (needThumbsInit) {
4773    const initialized = thumbs.init();
4774    if (initialized) thumbs.update(true);
4775  }
4776  if (needControllerInit) {
4777    swiper.controller.control = currentParams.controller.control;
4778  }
4779  if (needPaginationInit) {
4780    if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {
4781      paginationEl = document.createElement('div');
4782      paginationEl.classList.add('swiper-pagination');
4783      paginationEl.part.add('pagination');
4784      swiper.el.appendChild(paginationEl);
4785    }
4786    if (paginationEl) currentParams.pagination.el = paginationEl;
4787    pagination.init();
4788    pagination.render();
4789    pagination.update();
4790  }
4791  if (needScrollbarInit) {
4792    if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {
4793      scrollbarEl = document.createElement('div');
4794      scrollbarEl.classList.add('swiper-scrollbar');
4795      scrollbarEl.part.add('scrollbar');
4796      swiper.el.appendChild(scrollbarEl);
4797    }
4798    if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;
4799    scrollbar.init();
4800    scrollbar.updateSize();
4801    scrollbar.setTranslate();
4802  }
4803  if (needNavigationInit) {
4804    if (swiper.isElement) {
4805      if (!nextEl || typeof nextEl === 'string') {
4806        nextEl = document.createElement('div');
4807        nextEl.classList.add('swiper-button-next');
4808        nextEl.innerHTML = swiper.hostEl.constructor.nextButtonSvg;
4809        nextEl.part.add('button-next');
4810        swiper.el.appendChild(nextEl);
4811      }
4812      if (!prevEl || typeof prevEl === 'string') {
4813        prevEl = document.createElement('div');
4814        prevEl.classList.add('swiper-button-prev');
4815        prevEl.innerHTML = swiper.hostEl.constructor.prevButtonSvg;
4816        prevEl.part.add('button-prev');
4817        swiper.el.appendChild(prevEl);
4818      }
4819    }
4820    if (nextEl) currentParams.navigation.nextEl = nextEl;
4821    if (prevEl) currentParams.navigation.prevEl = prevEl;
4822    navigation.init();
4823    navigation.update();
4824  }
4825  if (changedParams.includes('allowSlideNext')) {
4826    swiper.allowSlideNext = passedParams.allowSlideNext;
4827  }
4828  if (changedParams.includes('allowSlidePrev')) {
4829    swiper.allowSlidePrev = passedParams.allowSlidePrev;
4830  }
4831  if (changedParams.includes('direction')) {
4832    swiper.changeDirection(passedParams.direction, false);
4833  }
4834  if (loopNeedDestroy || loopNeedReloop) {
4835    swiper.loopDestroy();
4836  }
4837  if (loopNeedEnable || loopNeedReloop) {
4838    swiper.loopCreate();
4839  }
4840  swiper.update();
4841}
4842
4843
4844
4845;// CONCATENATED MODULE: ./node_modules/swiper/shared/update-on-virtual-data.mjs
4846
4847
4848
4849function getParams(obj, splitEvents) {
4850  if (obj === void 0) {
4851    obj = {};
4852  }
4853  if (splitEvents === void 0) {
4854    splitEvents = true;
4855  }
4856  const params = {
4857    on: {}
4858  };
4859  const events = {};
4860  const passedParams = {};
4861  extend(params, defaults);
4862  params._emitClasses = true;
4863  params.init = false;
4864  const rest = {};
4865  const allowedParams = paramsList.map(key => key.replace(/_/, ''));
4866  const plainObj = Object.assign({}, obj);
4867  Object.keys(plainObj).forEach(key => {
4868    if (typeof obj[key] === 'undefined') return;
4869    if (allowedParams.indexOf(key) >= 0) {
4870      if (isObject(obj[key])) {
4871        params[key] = {};
4872        passedParams[key] = {};
4873        extend(params[key], obj[key]);
4874        extend(passedParams[key], obj[key]);
4875      } else {
4876        params[key] = obj[key];
4877        passedParams[key] = obj[key];
4878      }
4879    } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {
4880      if (splitEvents) {
4881        events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];
4882      } else {
4883        params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];
4884      }
4885    } else {
4886      rest[key] = obj[key];
4887    }
4888  });
4889  ['navigation', 'pagination', 'scrollbar'].forEach(key => {
4890    if (params[key] === true) params[key] = {};
4891    if (params[key] === false) delete params[key];
4892  });
4893  return {
4894    params,
4895    passedParams,
4896    rest,
4897    events
4898  };
4899}
4900
4901function mountSwiper(_ref, swiperParams) {
4902  let {
4903    el,
4904    nextEl,
4905    prevEl,
4906    paginationEl,
4907    scrollbarEl,
4908    swiper
4909  } = _ref;
4910  if (needsNavigation(swiperParams) && nextEl && prevEl) {
4911    swiper.params.navigation.nextEl = nextEl;
4912    swiper.originalParams.navigation.nextEl = nextEl;
4913    swiper.params.navigation.prevEl = prevEl;
4914    swiper.originalParams.navigation.prevEl = prevEl;
4915  }
4916  if (needsPagination(swiperParams) && paginationEl) {
4917    swiper.params.pagination.el = paginationEl;
4918    swiper.originalParams.pagination.el = paginationEl;
4919  }
4920  if (needsScrollbar(swiperParams) && scrollbarEl) {
4921    swiper.params.scrollbar.el = scrollbarEl;
4922    swiper.originalParams.scrollbar.el = scrollbarEl;
4923  }
4924  swiper.init(el);
4925}
4926
4927function getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {
4928  const keys = [];
4929  if (!oldParams) return keys;
4930  const addKey = key => {
4931    if (keys.indexOf(key) < 0) keys.push(key);
4932  };
4933  if (children && oldChildren) {
4934    const oldChildrenKeys = oldChildren.map(getKey);
4935    const childrenKeys = children.map(getKey);
4936    if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');
4937    if (oldChildren.length !== children.length) addKey('children');
4938  }
4939  const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));
4940  watchParams.forEach(key => {
4941    if (key in swiperParams && key in oldParams) {
4942      if (isObject(swiperParams[key]) && isObject(oldParams[key])) {
4943        const newKeys = Object.keys(swiperParams[key]);
4944        const oldKeys = Object.keys(oldParams[key]);
4945        if (newKeys.length !== oldKeys.length) {
4946          addKey(key);
4947        } else {
4948          newKeys.forEach(newKey => {
4949            if (swiperParams[key][newKey] !== oldParams[key][newKey]) {
4950              addKey(key);
4951            }
4952          });
4953          oldKeys.forEach(oldKey => {
4954            if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);
4955          });
4956        }
4957      } else if (swiperParams[key] !== oldParams[key]) {
4958        addKey(key);
4959      }
4960    }
4961  });
4962  return keys;
4963}
4964
4965const updateOnVirtualData = swiper => {
4966  if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;
4967  swiper.updateSlides();
4968  swiper.updateProgress();
4969  swiper.updateSlidesClasses();
4970  if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {
4971    swiper.parallax.setTranslate();
4972  }
4973};
4974
4975
4976
4977;// CONCATENATED MODULE: ./node_modules/swiper/swiper-react.mjs
4978/**
4979 * Swiper React 11.0.5
4980 * Most modern mobile touch slider and framework with hardware accelerated transitions
4981 * https://swiperjs.com
4982 *
4983 * Copyright 2014-2023 Vladimir Kharlampidi
4984 *
4985 * Released under the MIT License
4986 *
4987 * Released on: November 22, 2023
4988 */
4989
4990
4991
4992
4993
4994
4995function _extends() {
4996  _extends = Object.assign ? Object.assign.bind() : function (target) {
4997    for (var i = 1; i < arguments.length; i++) {
4998      var source = arguments[i];
4999      for (var key in source) {
5000        if (Object.prototype.hasOwnProperty.call(source, key)) {
5001          target[key] = source[key];
5002        }
5003      }
5004    }
5005    return target;
5006  };
5007  return _extends.apply(this, arguments);
5008}
5009
5010function isChildSwiperSlide(child) {
5011  return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');
5012}
5013function processChildren(c) {
5014  const slides = [];
5015  react.Children.toArray(c).forEach(child => {
5016    if (isChildSwiperSlide(child)) {
5017      slides.push(child);
5018    } else if (child.props && child.props.children) {
5019      processChildren(child.props.children).forEach(slide => slides.push(slide));
5020    }
5021  });
5022  return slides;
5023}
5024function getChildren(c) {
5025  const slides = [];
5026  const slots = {
5027    'container-start': [],
5028    'container-end': [],
5029    'wrapper-start': [],
5030    'wrapper-end': []
5031  };
5032  react.Children.toArray(c).forEach(child => {
5033    if (isChildSwiperSlide(child)) {
5034      slides.push(child);
5035    } else if (child.props && child.props.slot && slots[child.props.slot]) {
5036      slots[child.props.slot].push(child);
5037    } else if (child.props && child.props.children) {
5038      const foundSlides = processChildren(child.props.children);
5039      if (foundSlides.length > 0) {
5040        foundSlides.forEach(slide => slides.push(slide));
5041      } else {
5042        slots['container-end'].push(child);
5043      }
5044    } else {
5045      slots['container-end'].push(child);
5046    }
5047  });
5048  return {
5049    slides,
5050    slots
5051  };
5052}
5053
5054function renderVirtual(swiper, slides, virtualData) {
5055  if (!virtualData) return null;
5056  const getSlideIndex = index => {
5057    let slideIndex = index;
5058    if (index < 0) {
5059      slideIndex = slides.length + index;
5060    } else if (slideIndex >= slides.length) {
5061      // eslint-disable-next-line
5062      slideIndex = slideIndex - slides.length;
5063    }
5064    return slideIndex;
5065  };
5066  const style = swiper.isHorizontal() ? {
5067    [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`
5068  } : {
5069    top: `${virtualData.offset}px`
5070  };
5071  const {
5072    from,
5073    to
5074  } = virtualData;
5075  const loopFrom = swiper.params.loop ? -slides.length : 0;
5076  const loopTo = swiper.params.loop ? slides.length * 2 : slides.length;
5077  const slidesToRender = [];
5078  for (let i = loopFrom; i < loopTo; i += 1) {
5079    if (i >= from && i <= to) {
5080      slidesToRender.push(slides[getSlideIndex(i)]);
5081    }
5082  }
5083  return slidesToRender.map((child, index) => {
5084    return /*#__PURE__*/react.cloneElement(child, {
5085      swiper,
5086      style,
5087      key: `slide-${index}`
5088    });
5089  });
5090}
5091
5092function useIsomorphicLayoutEffect(callback, deps) {
5093  // eslint-disable-next-line
5094  if (typeof window === 'undefined') return (0,react.useEffect)(callback, deps);
5095  return (0,react.useLayoutEffect)(callback, deps);
5096}
5097
5098const SwiperSlideContext = /*#__PURE__*/(0,react.createContext)(null);
5099const useSwiperSlide = () => {
5100  return useContext(SwiperSlideContext);
5101};
5102const SwiperContext = /*#__PURE__*/(0,react.createContext)(null);
5103const useSwiper = () => {
5104  return useContext(SwiperContext);
5105};
5106
5107const swiper_react_Swiper = /*#__PURE__*/(0,react.forwardRef)(function (_temp, externalElRef) {
5108  let {
5109    className,
5110    tag: Tag = 'div',
5111    wrapperTag: WrapperTag = 'div',
5112    children,
5113    onSwiper,
5114    ...rest
5115  } = _temp === void 0 ? {} : _temp;
5116  let eventsAssigned = false;
5117  const [containerClasses, setContainerClasses] = (0,react.useState)('swiper');
5118  const [virtualData, setVirtualData] = (0,react.useState)(null);
5119  const [breakpointChanged, setBreakpointChanged] = (0,react.useState)(false);
5120  const initializedRef = (0,react.useRef)(false);
5121  const swiperElRef = (0,react.useRef)(null);
5122  const swiperRef = (0,react.useRef)(null);
5123  const oldPassedParamsRef = (0,react.useRef)(null);
5124  const oldSlides = (0,react.useRef)(null);
5125  const nextElRef = (0,react.useRef)(null);
5126  const prevElRef = (0,react.useRef)(null);
5127  const paginationElRef = (0,react.useRef)(null);
5128  const scrollbarElRef = (0,react.useRef)(null);
5129  const {
5130    params: swiperParams,
5131    passedParams,
5132    rest: restProps,
5133    events
5134  } = getParams(rest);
5135  const {
5136    slides,
5137    slots
5138  } = getChildren(children);
5139  const onBeforeBreakpoint = () => {
5140    setBreakpointChanged(!breakpointChanged);
5141  };
5142  Object.assign(swiperParams.on, {
5143    _containerClasses(swiper, classes) {
5144      setContainerClasses(classes);
5145    }
5146  });
5147  const initSwiper = () => {
5148    // init swiper
5149    Object.assign(swiperParams.on, events);
5150    eventsAssigned = true;
5151    const passParams = {
5152      ...swiperParams
5153    };
5154    delete passParams.wrapperClass;
5155    swiperRef.current = new Swiper(passParams);
5156    if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {
5157      swiperRef.current.virtual.slides = slides;
5158      const extendWith = {
5159        cache: false,
5160        slides,
5161        renderExternal: setVirtualData,
5162        renderExternalUpdate: false
5163      };
5164      extend(swiperRef.current.params.virtual, extendWith);
5165      extend(swiperRef.current.originalParams.virtual, extendWith);
5166    }
5167  };
5168  if (!swiperElRef.current) {
5169    initSwiper();
5170  }
5171
5172  // Listen for breakpoints change
5173  if (swiperRef.current) {
5174    swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);
5175  }
5176  const attachEvents = () => {
5177    if (eventsAssigned || !events || !swiperRef.current) return;
vendor: 2,302 bytes, lines 5178-5256
5178    Object.keys(events).forEach(eventName => {
5179      swiperRef.current.on(eventName, events[eventName]);
5180    });
5181  };
5182  const detachEvents = () => {
5183    if (!events || !swiperRef.current) return;
5184    Object.keys(events).forEach(eventName => {
5185      swiperRef.current.off(eventName, events[eventName]);
5186    });
5187  };
5188  (0,react.useEffect)(() => {
5189    return () => {
5190      if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);
5191    };
5192  });
5193
5194  // set initialized flag
5195  (0,react.useEffect)(() => {
5196    if (!initializedRef.current && swiperRef.current) {
5197      swiperRef.current.emitSlidesClasses();
5198      initializedRef.current = true;
5199    }
5200  });
5201
5202  // mount swiper
5203  useIsomorphicLayoutEffect(() => {
5204    if (externalElRef) {
5205      externalElRef.current = swiperElRef.current;
5206    }
5207    if (!swiperElRef.current) return;
5208    if (swiperRef.current.destroyed) {
5209      initSwiper();
5210    }
5211    mountSwiper({
5212      el: swiperElRef.current,
5213      nextEl: nextElRef.current,
5214      prevEl: prevElRef.current,
5215      paginationEl: paginationElRef.current,
5216      scrollbarEl: scrollbarElRef.current,
5217      swiper: swiperRef.current
5218    }, swiperParams);
5219    if (onSwiper) onSwiper(swiperRef.current);
5220    // eslint-disable-next-line
5221    return () => {
5222      if (swiperRef.current && !swiperRef.current.destroyed) {
5223        swiperRef.current.destroy(true, false);
5224      }
5225    };
5226  }, []);
5227
5228  // watch for params change
5229  useIsomorphicLayoutEffect(() => {
5230    attachEvents();
5231    const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);
5232    oldPassedParamsRef.current = passedParams;
5233    oldSlides.current = slides;
5234    if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {
5235      updateSwiper({
5236        swiper: swiperRef.current,
5237        slides,
5238        passedParams,
5239        changedParams,
5240        nextEl: nextElRef.current,
5241        prevEl: prevElRef.current,
5242        scrollbarEl: scrollbarElRef.current,
5243        paginationEl: paginationElRef.current
5244      });
5245    }
5246    return () => {
5247      detachEvents();
5248    };
5249  });
5250
5251  // update on virtual update
5252  useIsomorphicLayoutEffect(() => {
5253    updateOnVirtualData(swiperRef.current);
5254  }, [virtualData]);
5255
5256  // bypass swiper instance to slides
vendor: 4,198 bytes, lines 5257-5376
5257  function renderSlides() {
5258    if (swiperParams.virtual) {
5259      return renderVirtual(swiperRef.current, slides, virtualData);
5260    }
5261    return slides.map((child, index) => {
5262      return /*#__PURE__*/react.cloneElement(child, {
5263        swiper: swiperRef.current,
5264        swiperSlideIndex: index
5265      });
5266    });
5267  }
5268  return /*#__PURE__*/react.createElement(Tag, _extends({
5269    ref: swiperElRef,
5270    className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)
5271  }, restProps), /*#__PURE__*/react.createElement(SwiperContext.Provider, {
5272    value: swiperRef.current
5273  }, slots['container-start'], /*#__PURE__*/react.createElement(WrapperTag, {
5274    className: wrapperClass(swiperParams.wrapperClass)
5275  }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
5276    ref: prevElRef,
5277    className: "swiper-button-prev"
5278  }), /*#__PURE__*/react.createElement("div", {
5279    ref: nextElRef,
5280    className: "swiper-button-next"
5281  })), needsScrollbar(swiperParams) && /*#__PURE__*/react.createElement("div", {
5282    ref: scrollbarElRef,
5283    className: "swiper-scrollbar"
5284  }), needsPagination(swiperParams) && /*#__PURE__*/react.createElement("div", {
5285    ref: paginationElRef,
5286    className: "swiper-pagination"
5287  }), slots['container-end']));
5288});
5289swiper_react_Swiper.displayName = 'Swiper';
5290
5291const SwiperSlide = /*#__PURE__*/(0,react.forwardRef)(function (_temp, externalRef) {
5292  let {
5293    tag: Tag = 'div',
5294    children,
5295    className = '',
5296    swiper,
5297    zoom,
5298    lazy,
5299    virtualIndex,
5300    swiperSlideIndex,
5301    ...rest
5302  } = _temp === void 0 ? {} : _temp;
5303  const slideElRef = (0,react.useRef)(null);
5304  const [slideClasses, setSlideClasses] = (0,react.useState)('swiper-slide');
5305  const [lazyLoaded, setLazyLoaded] = (0,react.useState)(false);
5306  function updateClasses(_s, el, classNames) {
5307    if (el === slideElRef.current) {
5308      setSlideClasses(classNames);
5309    }
5310  }
5311  useIsomorphicLayoutEffect(() => {
5312    if (typeof swiperSlideIndex !== 'undefined') {
5313      slideElRef.current.swiperSlideIndex = swiperSlideIndex;
5314    }
5315    if (externalRef) {
5316      externalRef.current = slideElRef.current;
5317    }
5318    if (!slideElRef.current || !swiper) {
5319      return;
5320    }
5321    if (swiper.destroyed) {
5322      if (slideClasses !== 'swiper-slide') {
5323        setSlideClasses('swiper-slide');
5324      }
5325      return;
5326    }
5327    swiper.on('_slideClass', updateClasses);
5328    // eslint-disable-next-line
5329    return () => {
5330      if (!swiper) return;
5331      swiper.off('_slideClass', updateClasses);
5332    };
5333  });
5334  useIsomorphicLayoutEffect(() => {
5335    if (swiper && slideElRef.current && !swiper.destroyed) {
5336      setSlideClasses(swiper.getSlideClasses(slideElRef.current));
5337    }
5338  }, [swiper]);
5339  const slideData = {
5340    isActive: slideClasses.indexOf('swiper-slide-active') >= 0,
5341    isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,
5342    isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,
5343    isNext: slideClasses.indexOf('swiper-slide-next') >= 0
5344  };
5345  const renderChildren = () => {
5346    return typeof children === 'function' ? children(slideData) : children;
5347  };
5348  const onLoad = () => {
5349    setLazyLoaded(true);
5350  };
5351  return /*#__PURE__*/react.createElement(Tag, _extends({
5352    ref: slideElRef,
5353    className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),
5354    "data-swiper-slide-index": virtualIndex,
5355    onLoad: onLoad
5356  }, rest), zoom && /*#__PURE__*/react.createElement(SwiperSlideContext.Provider, {
5357    value: slideData
5358  }, /*#__PURE__*/react.createElement("div", {
5359    className: "swiper-zoom-container",
5360    "data-swiper-zoom": typeof zoom === 'number' ? zoom : undefined
5361  }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/react.createElement("div", {
5362    className: "swiper-lazy-preloader"
5363  }))), !zoom && /*#__PURE__*/react.createElement(SwiperSlideContext.Provider, {
5364    value: slideData
5365  }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/react.createElement("div", {
5366    className: "swiper-lazy-preloader"
5367  })));
5368});
5369SwiperSlide.displayName = 'SwiperSlide';
5370
5371
5372
5373
5374/***/ })
5375
5376}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.