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.