1(() => { 2 "use strict"; 3 function ssr_window_esm_isObject(obj) { 4 return obj !== null && typeof obj === "object" && "constructor" in obj && obj.constructor === Object; 5 } 6 function extend(target, src) { 7 if (target === void 0) target = {}; 8 if (src === void 0) src = {}; 9 Object.keys(src).forEach((key => { 10 if (typeof target[key] === "undefined") target[key] = src[key]; else if (ssr_window_esm_isObject(src[key]) && ssr_window_esm_isObject(target[key]) && Object.keys(src[key]).length > 0) extend(target[key], src[key]); 11 })); 12 } 13 const ssrDocument = { 14 body: {}, 15 addEventListener() {}, 16 removeEventListener() {}, 17 activeElement: { 18 blur() {}, 19 nodeName: "" 20 }, 21 querySelector() { 22 return null; 23 }, 24 querySelectorAll() { 25 return []; 26 }, 27 getElementById() { 28 return null; 29 }, 30 createEvent() { 31 return { 32 initEvent() {} 33 }; 34 }, 35 createElement() { 36 return { 37 children: [], 38 childNodes: [], 39 style: {}, 40 setAttribute() {}, 41 getElementsByTagName() { 42 return []; 43 } 44 }; 45 }, 46 createElementNS() { 47 return {}; 48 }, 49 importNode() { 50 return null; 51 }, 52 location: { 53 hash: "", 54 host: "", 55 hostname: "", 56 href: "", 57 origin: "", 58 pathname: "", 59 protocol: "", 60 search: "" 61 } 62 }; 63 function ssr_window_esm_getDocument() { 64 const doc = typeof document !== "undefined" ? document : {}; 65 extend(doc, ssrDocument); 66 return doc; 67 } 68 const ssrWindow = { 69 document: ssrDocument, 70 navigator: { 71 userAgent: "" 72 }, 73 location: { 74 hash: "", 75 host: "", 76 hostname: "", 77 href: "", 78 origin: "", 79 pathname: "", 80 protocol: "", 81 search: "" 82 }, 83 history: { 84 replaceState() {}, 85 pushState() {}, 86 go() {}, 87 back() {} 88 }, 89 CustomEvent: function CustomEvent() { 90 return this; 91 }, 92 addEventListener() {}, 93 removeEventListener() {}, 94 getComputedStyle() { 95 return { 96 getPropertyValue() { 97 return ""; 98 } 99 }; 100 }, 101 Image() {}, 102 Date() {}, 103 screen: {}, 104 setTimeout() {}, 105 clearTimeout() {}, 106 matchMedia() { 107 return {}; 108 }, 109 requestAnimationFrame(callback) { 110 if (typeof setTimeout === "undefined") { 111 callback(); 112 return null; 113 } 114 return setTimeout(callback, 0); 115 }, 116 cancelAnimationFrame(id) { 117 if (typeof setTimeout === "undefined") return; 118 clearTimeout(id); 119 } 120 }; 121 function ssr_window_esm_getWindow() { 122 const win = typeof window !== "undefined" ? window : {}; 123 extend(win, ssrWindow); 124 return win; 125 } 126 function classesToTokens(classes) { 127 if (classes === void 0) classes = ""; 128 return classes.trim().split(" ").filter((c => !!c.trim())); 129 } 130 function deleteProps(obj) { 131 const object = obj; 132 Object.keys(object).forEach((key => { 133 try { 134 object[key] = null; 135 } catch (e) {} 136 try { 137 delete object[key]; 138 } catch (e) {} 139 })); 140 } 141 function utils_nextTick(callback, delay) { 142 if (delay === void 0) delay = 0; 143 return setTimeout(callback, delay); 144 } 145 function utils_now() { 146 return Date.now(); 147 } 148 function utils_getComputedStyle(el) { 149 const window = ssr_window_esm_getWindow(); 150 let style; 151 if (window.getComputedStyle) style = window.getComputedStyle(el, null); 152 if (!style && el.currentStyle) style = el.currentStyle; 153 if (!style) style = el.style; 154 return style; 155 } 156 function utils_getTranslate(el, axis) { 157 if (axis === void 0) axis = "x"; 158 const window = ssr_window_esm_getWindow(); 159 let matrix; 160 let curTransform; 161 let transformMatrix; 162 const curStyle = utils_getComputedStyle(el); 163 if (window.WebKitCSSMatrix) { 164 curTransform = curStyle.transform || curStyle.webkitTransform; 165 if (curTransform.split(",").length > 6) curTransform = curTransform.split(", ").map((a => a.replace(",", "."))).join(", "); 166 transformMatrix = new window.WebKitCSSMatrix(curTransform === "none" ? "" : curTransform); 167 } else { 168 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue("transform").replace("translate(", "matrix(1, 0, 0, 1,"); 169 matrix = transformMatrix.toString().split(","); 170 } 171 if (axis === "x") if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); else curTransform = parseFloat(matrix[4]); 172 if (axis === "y") if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); else curTransform = parseFloat(matrix[5]); 173 return curTransform || 0; 174 } 175 function utils_isObject(o) { 176 return typeof o === "object" && o !== null && o.constructor && Ob
176ject.prototype.toString.call(o).slice(8, -1) === "Object"; 177 } 178 function isNode(node) { 179 if (typeof window !== "undefined" && typeof window.HTMLElement !== "undefined") return node instanceof HTMLElement; 180 return node && (node.nodeType === 1 || node.nodeType === 11); 181 } 182 function utils_extend() { 183 const to = Object(arguments.length <= 0 ? void 0 : arguments[0]); 184 const noExtend = [ "__proto__", "constructor", "prototype" ]; 185 for (let i = 1; i < arguments.length; i += 1) { 186 const nextSource = i < 0 || arguments.length <= i ? void 0 : arguments[i]; 187 if (nextSource !== void 0 && nextSource !== null && !isNode(nextSource)) { 188 const keysArray = Object.keys(Object(nextSource)).filter((key => noExtend.indexOf(key) < 0)); 189 for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 190 const nextKey = keysArray[nextIndex]; 191 const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 192 if (desc !== void 0 && desc.enumerable) if (utils_isObject(to[nextKey]) && utils_isObject(nextSource[nextKey])) if (nextSource[nextKey].__swiper__) to[nextKey] = nextSource[nextKey]; else utils_extend(to[nextKey], nextSource[nextKey]); else if (!utils_isObject(to[nextKey]) && utils_isObject(nextSource[nextKey])) { 193 to[nextKey] = {}; 194 if (nextSource[nextKey].__swiper__) to[nextKey] = nextSource[nextKey]; else utils_extend(to[nextKey], nextSource[nextKey]); 195 } else to[nextKey] = nextSource[nextKey]; 196 } 197 } 198 } 199 return to; 200 } 201 function utils_setCSSProperty(el, varName, varValue) { 202 el.style.setProperty(varName, varValue); 203 } 204 function animateCSSModeScroll(_ref) { 205 let {swiper, targetPosition, side} = _ref; 206 const window = ssr_window_esm_getWindow(); 207 const startPosition = -swiper.translate; 208 let startTime = null; 209 let time; 210 const duration = swiper.params.speed; 211 swiper.wrapperEl.style.scrollSnapType = "none"; 212 window.cancelAnimationFrame(swiper.cssModeFrameID); 213 const dir = targetPosition > startPosition ? "next" : "prev"; 214 const isOutOfBound = (current, target) => dir === "next" && current >= target || dir === "prev" && current <= target; 215 const animate = () => { 216 time = (new Date).getTime(); 217 if (startTime === null) startTime = time; 218 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 219 const easeProgress = .5 - Math.cos(progress * Math.PI) / 2; 220 let currentPosition = startPosition + easeProgress * (targetPosition - startPosition); 221 if (isOutOfBound(currentPosition, targetPosition)) currentPosition = targetPosition; 222 swiper.wrapperEl.scrollTo({ 223 [side]: currentPosition 224 }); 225 if (isOutOfBound(currentPosition, targetPosition)) { 226 swiper.wrapperEl.style.overflow = "hidden"; 227 swiper.wrapperEl.style.scrollSnapType = ""; 228 setTimeout((() => { 229 swiper.wrapperEl.style.overflow = ""; 230 swiper.wrapperEl.scrollTo({ 231 [side]: currentPosition 232 }); 233 })); 234 window.cancelAnimationFrame(swiper.cssModeFrameID); 235 return; 236 } 237 swiper.cssModeFrameID = window.requestAnimationFrame(animate); 238 }; 239 animate(); 240 } 241 function utils_elementChildren(element, selector) { 242 if (selector === void 0) selector = ""; 243 return [ ...element.children ].filter((el => el.matches(selector))); 244 } 245 function showWarning(text) { 246 try { 247 console.warn(text); 248 return; 249 } catch (err) {} 250 } 251 function utils_createElement(tag, classes) { 252 if (classes === void 0) classes = []; 253 const el = document.createElement(tag);
254 el.classList.add(...Array.isArray(classes) ? classes : classesToTokens(classes)); 255 return el; 256 } 257 function utils_elementOffset(el) { 258 const window = ssr_window_esm_getWindow(); 259 const document = ssr_window_esm_getDocument(); 260 const box = el.getBoundingClientRect(); 261 const body = document.body; 262 const clientTop = el.clientTop || body.clientTop || 0; 263 const clientLeft = el.clientLeft || body.clientLeft || 0; 264 const scrollTop = el === window ? window.scrollY : el.scrollTop; 265 const scrollLeft = el === window ? window.scrollX : el.scrollLeft; 266 return { 267 top: box.top + scrollTop - clientTop, 268 left: box.left + scrollLeft - clientLeft 269 }; 270 } 271 function elementPrevAll(el, selector) { 272 const prevEls = []; 273 while (el.previousElementSibling) { 274 const prev = el.previousElementSibling; 275 if (selector) { 276 if (prev.matches(selector)) prevEls.push(prev); 277 } else prevEls.push(prev); 278 el = prev; 279 } 280 return prevEls; 281 } 282 function elementNextAll(el, selector) { 283 const nextEls = []; 284 while (el.nextElementSibling) { 285 const next = el.nextElementSibling; 286 if (selector) { 287 if (next.matches(selector)) nextEls.push(next); 288 } else nextEls.push(next); 289 el = next; 290 } 291 return nextEls; 292 } 293 function elementStyle(el, prop) { 294 const window = ssr_window_esm_getWindow(); 295 return window.getComputedStyle(el, null).getPropertyValue(prop); 296 } 297 function utils_elementIndex(el) { 298 let child = el; 299 let i; 300 if (child) { 301 i = 0; 302 while ((child = child.previousSibling) !== null) if (child.nodeType === 1) i += 1; 303 return i; 304 } 305 return; 306 } 307 function utils_elementParents(el, selector) { 308 const parents = []; 309 let parent = el.parentElement; 310 while (parent) { 311 if (selector) { 312 if (parent.matches(selector)) parents.push(parent); 313 } else parents.push(parent); 314 parent = parent.parentElement; 315 } 316 return parents; 317 } 318 function utils_elementOuterSize(el, size, includeMargins) { 319 const window = ssr_window_esm_getWindow(); 320 if (includeMargins) 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")); 321 return el.offsetWidth; 322 } 323 let support; 324 function calcSupport() { 325 const window = ssr_window_esm_getWindow(); 326 const document = ssr_window_esm_getDocument(); 327 return { 328 smoothScroll: document.documentElement && document.documentElement.style && "scrollBehavior" in document.documentElement.style, 329 touch: !!("ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) 330 }; 331 } 332 function getSupport() { 333 if (!support) support = calcSupport(); 334 return support; 335 } 336 let deviceCached; 337 function calcDevice(_temp) { 338 let {userAgent} = _temp === void 0 ? {} : _temp;
339 const support = getSupport(); 340 const window = ssr_window_esm_getWindow(); 341 const platform = window.navigator.platform; 342 const ua = userAgent || window.navigator.userAgent; 343 const device = { 344 ios: false, 345 android: false 346 }; 347 const screenWidth = window.screen.width; 348 const screenHeight = window.screen.height; 349 const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); 350 let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 351 const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 352 const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 353 const windows = platform === "Win32"; 354 let macos = platform === "MacIntel"; 355 const iPadScreens = [ "1024x1366", "1366x1024", "834x1194", "1194x834", "834x1112", "1112x834", "768x1024", "1024x768", "820x1180", "1180x820", "810x1080", "1080x810" ]; 356 if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) { 357 ipad = ua.match(/(Version)\/([\d.]+)/); 358 if (!ipad) ipad = [ 0, 1, "13_0_0" ]; 359 macos = false; 360 } 361 if (android && !windows) { 362 device.os = "android"; 363 device.android = true; 364 } 365 if (ipad || iphone || ipod) { 366 device.os = "ios"; 367 device.ios = true; 368 } 369 return device; 370 } 371 function getDevice(overrides) { 372 if (overrides === void 0) overrides = {}; 373 if (!deviceCached) deviceCached = calcDevice(overrides); 374 return deviceCached; 375 } 376 let browser; 377 function calcBrowser() { 378 const window = ssr_window_esm_getWindow(); 379 let needPerspectiveFix = false; 380 function isSafari() { 381 const ua = window.navigator.userAgent.toLowerCase(); 382 return ua.indexOf("safari") >= 0 && ua.indexOf("chrome") < 0 && ua.indexOf("android") < 0; 383 } 384 if (isSafari()) { 385 const ua = String(window.navigator.userAgent); 386 if (ua.includes("Version/")) { 387 const [major, minor] = ua.split("Version/")[1].split(" ")[0].split(".").map((num => Number(num))); 388 needPerspectiveFix = major < 16 || major === 16 && minor < 2; 389 } 390 } 391 return { 392 isSafari: needPerspectiveFix || isSafari(), 393 needPerspectiveFix, 394 isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) 395 }; 396 } 397 function getBrowser() { 398 if (!browser) browser = calcBrowser(); 399 return browser; 400 } 401 function Resize(_ref) { 402 let {swiper, on, emit} = _ref; 403 const window = ssr_window_esm_getWindow(); 404 let observer = null; 405 let animationFrame = null; 406 const resizeHandler = () => { 407 if (!swiper || swiper.destroyed || !swiper.initialized) return; 408 emit("beforeResize"); 409 emit("resize"); 410 }; 411 const createObserver = () => { 412 if (!swiper || swiper.destroyed || !swiper.initialized) return; 413 observer = new ResizeObserver((entries => { 414 animationFrame = window.requestAnimationFrame((() => { 415 const {width, height} = swiper; 416 let newWidth = width; 417 let newHeight = height; 418 entries.forEach((_ref2 => { 419 let {contentBoxSize, contentRect, target} = _ref2; 420 if (target && target !== swiper.el) return; 421 newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; 422 newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; 423 })); 424 if (newWidth !== width || newHeight !== height) resizeHandler(); 425 })); 426 })); 427 observer.observe(swiper.el); 428 }; 429 const removeObserver = () => { 430 if (animationFrame) window.cancelAnimationFrame(animationFrame); 431 if (observer && observer.unobserve && swiper.el) { 432 observer.unobserve(swiper.el); 433 observer = null; 434 } 435 }; 436 const orientationChangeHandler = () => { 437 if (!swiper || swiper.destroyed || !swiper.initialized) return; 438 emit("orientationchange"); 439 }; 440 on("init", (() => { 441 if (swiper.params.resizeObserver && typeof window.ResizeObserver !== "undefined") { 442 createObserver(); 443 return; 444 } 445 window.addEventListener("resize", resizeHandler); 446 window.addEventListener("orientationchange", orientationChangeHandler); 447 })); 448 on("destroy", (() => { 449 removeObserver(); 450 window.removeEventListener("resize", resizeHandler); 451 window.removeEventListener("orientationchange", orientationChangeHandler); 452 })); 453 } 454 function Observer(_ref) { 455 let {swiper, extendParams, on, emit} = _ref; 456 const observers = []; 457 const window = ssr_window_esm_getWindow(); 458 const attach = function(target, options) { 459 if (options === void 0) options = {}; 460 const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 461 const observer = new ObserverFunc((mutations => { 462 if (swiper.__preventObserver__) return; 463 if (mutations.length === 1) { 464 emit("observerUpdate", mutations[0]); 465 return; 466 } 467 const observerUpdate = function observerUpdate() { 468 emit("observerUpdate", mutations[0]); 469 }; 470 if (window.requestAnimationFrame) window.requestAnimationFrame(observerUpdate); else window.setTimeout(observerUpdate, 0); 471 })); 472 observer.observe(target, { 473 attributes: typeof options.attributes === "undefined" ? true : options.attributes, 474 childList: typeof options.childList === "undefined" ? true : options.childList, 475 characterData: typeof options.characterData === "undefined" ? true : options.characterData 476 }); 477 observers.push(observer); 478 }; 479 const init = () => { 480 if (!swiper.params.observer) return; 481 if (swiper.params.observeParents) { 482 const containerParents = utils_elementParents(swiper.hostEl); 483 for (let i = 0; i < containerParents.length; i += 1) attach(containerParents[i]); 484 } 485 attach(swiper.hostEl, { 486 childList: swiper.params.observeSlideChildren 487 }); 488 attach(swiper.wrapperEl, { 489 attributes: false 490 }); 491 }; 492 const destroy = () => {
493 observers.forEach((observer => { 494 observer.disconnect(); 495 })); 496 observers.splice(0, observers.length); 497 }; 498 extendParams({ 499 observer: false, 500 observeParents: false, 501 observeSlideChildren: false 502 }); 503 on("init", init); 504 on("destroy", destroy); 505 } 506 var eventsEmitter = { 507 on(events, handler, priority) { 508 const self = this; 509 if (!self.eventsListeners || self.destroyed) return self; 510 if (typeof handler !== "function") return self; 511 const method = priority ? "unshift" : "push"; 512 events.split(" ").forEach((event => { 513 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 514 self.eventsListeners[event][method](handler); 515 })); 516 return self; 517 }, 518 once(events, handler, priority) { 519 const self = this; 520 if (!self.eventsListeners || self.destroyed) return self; 521 if (typeof handler !== "function") return self; 522 function onceHandler() { 523 self.off(events, onceHandler); 524 if (onceHandler.__emitterProxy) delete onceHandler.__emitterProxy; 525 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; 526 handler.apply(self, args); 527 } 528 onceHandler.__emitterProxy = handler; 529 return self.on(events, onceHandler, priority); 530 }, 531 onAny(handler, priority) { 532 const self = this; 533 if (!self.eventsListeners || self.destroyed) return self; 534 if (typeof handler !== "function") return self; 535 const method = priority ? "unshift" : "push"; 536 if (self.eventsAnyListeners.indexOf(handler) < 0) self.eventsAnyListeners[method](handler); 537 return self; 538 }, 539 offAny(handler) { 540 const self = this; 541 if (!self.eventsListeners || self.destroyed) return self; 542 if (!self.eventsAnyListeners) return self; 543 const index = self.eventsAnyListeners.indexOf(handler); 544 if (index >= 0) self.eventsAnyListeners.splice(index, 1); 545 return self; 546 }, 547 off(events, handler) { 548 const self = this; 549 if (!self.eventsListeners || self.destroyed) return self; 550 if (!self.eventsListeners) return self; 551 events.split(" ").forEach((event => { 552 if (typeof handler === "undefined") self.eventsListeners[event] = []; else if (self.eventsListeners[event]) self.eventsListeners[event].forEach(((eventHandler, index) => { 553 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) self.eventsListeners[event].splice(index, 1); 554 })); 555 })); 556 return self; 557 }, 558 emit() { 559 const self = this; 560 if (!self.eventsListeners || self.destroyed) return self; 561 if (!self.eventsListeners) return self; 562 let events; 563 let data; 564 let context; 565 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) args[_key2] = arguments[_key2]; 566 if (typeof args[0] === "string" || Array.isArray(args[0])) { 567 events = args[0]; 568 data = args.slice(1, args.length); 569 context = self; 570 } else { 571 events = args[0].events; 572 data = args[0].data; 573 context = args[0].context || self; 574 } 575 data.unshift(context); 576 const eventsArray = Array.isArray(events) ? events : events.split(" "); 577 eventsArray.forEach((event => { 578 if (self.eventsAnyListeners && self.eventsAnyListeners.length) self.eventsAnyListeners.forEach((eventHandler => { 579 eventHandler.apply(context, [ event, ...data ]); 580 })); 581 if (self.eventsListeners && self.eventsListeners[event]) self.eventsListeners[event].forEach((eventHandler => { 582 eventHandler.apply(context, data); 583 })); 584 })); 585 return self; 586 } 587 }; 588 function updateSize() { 589 const swiper = this; 590 let width; 591 let height; 592 const el = swiper.el; 593 if (typeof swiper.params.width !== "undefined" && swiper.params.width !== null) width = swiper.params.width; else width = el.clientWidth; 594 if (typeof swiper.params.height !== "undefined" && swiper.params.height !== null) height = swiper.params.height; else height = el.clientHeight; 595 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) return; 596 width = width - parseInt(elementStyle(el, "padding-left") || 0, 10) - parseInt(elementStyle(el, "padding-right") || 0, 10); 597 height = height - parseInt(elementStyle(el, "padding-top") || 0, 10) - parseInt(elementStyle(el, "padding-bottom") || 0, 10); 598 if (Number.isNaN(width)) width = 0; 599 if (Number.isNaN(height)) height = 0; 600 Object.assign(swiper, { 601 width, 602 height, 603 size: swiper.isHorizontal() ? width : height 604 }); 605 } 606 function updateSlides() { 607 const swiper = this; 608 function getDirectionPropertyValue(node, label) { 609 return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0); 610 } 611 const params = swiper.params; 612 const {wrapperEl, slidesEl, size: swiperSize, rtlTranslate: rtl, wrongRTL} = swiper; 613 const isVirtual = swiper.virtual && params.virtual.enabled; 614 const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 615 const slides = utils_elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`); 616 const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 617 let snapGrid = []; 618 const slidesGrid = []; 619 const slidesSizesGrid = []; 620 let offsetBefore = params.slidesOffsetBefore; 621 if (typeof offsetBefore === "function") offsetBefore = params.slidesOffsetBefore.call(swi
621per); 622 let offsetAfter = params.slidesOffsetAfter; 623 if (typeof offsetAfter === "function") offsetAfter = params.slidesOffsetAfter.call(swiper); 624 const previousSnapGridLength = swiper.snapGrid.length; 625 const previousSlidesGridLength = swiper.slidesGrid.length; 626 let spaceBetween = params.spaceBetween; 627 let slidePosition = -offsetBefore; 628 let prevSlideSize = 0; 629 let index = 0; 630 if (typeof swiperSize === "undefined") return; 631 if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiperSize; else if (typeof spaceBetween === "string") spaceBetween = parseFloat(spaceBetween); 632 swiper.virtualSize = -spaceBetween; 633 slides.forEach((slideEl => { 634 if (rtl) slideEl.style.marginLeft = ""; else slideEl.style.marginRight = ""; 635 slideEl.style.marginBottom = ""; 636 slideEl.style.marginTop = ""; 637 })); 638 if (params.centeredSlides && params.cssMode) { 639 utils_setCSSProperty(wrapperEl, "--swiper-centered-offset-before", ""); 640 utils_setCSSProperty(wrapperEl, "--swiper-centered-offset-after", ""); 641 } 642 const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid; 643 if (gridEnabled) swiper.grid.initSlides(slides); else if (swiper.grid) swiper.grid.unsetSlides(); 644 let slideSize; 645 const shouldResetSlideSize = params.slidesPerView === "auto" && params.breakpoints && Object.keys(params.breakpoints).filter((key => typeof params.breakpoints[key].slidesPerView !== "undefined")).length > 0; 646 for (let i = 0; i < slidesLength; i += 1) { 647 slideSize = 0; 648 let slide; 649 if (slides[i]) slide = slides[i]; 650 if (gridEnabled) swiper.grid.updateSlide(i, slide, slides); 651 if (slides[i] && elementStyle(slide, "display") === "none") continue; 652 if (params.slidesPerView === "auto") { 653 if (shouldResetSlideSize) slides[i].style[swiper.getDirectionLabel("width")] = ``; 654 const slideStyles = getComputedStyle(slide); 655 const currentTransform = slide.style.transform; 656 const currentWebKitTransform = slide.style.webkitTransform; 657 if (currentTransform) slide.style.transform = "none"; 658 if (currentWebKitTransform) slide.style.webkitTransform = "none"; 659 if (params.roundLengths) slideSize = swiper.isHorizontal() ? utils_elementOuterSize(slide, "width", true) : utils_elementOuterSize(slide, "height", true); else { 660 const width = getDirectionPropertyValue(slideStyles, "width"); 661 const paddingLeft = getDirectionPropertyValue(slideStyles, "padding-left"); 662 const paddingRight = getDirectionPropertyValue(slideStyles, "padding-right"); 663 const marginLeft = getDirectionPropertyValue(slideStyles, "margin-left"); 664 const marginRight = getDirectionPropertyValue(slideStyles, "margin-right"); 665 const boxSizing = slideStyles.getPropertyValue("box-sizing"); 666 if (boxSizing && boxSizing === "border-box") slideSize = width + marginLeft + marginRight; else { 667 const {clientWidth, offsetWidth} = slide; 668 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); 669 } 670 } 671 if (currentTransform) slide.style.transform = currentTransform; 672 if (currentWebKitTransform) slide.style.webkitTransform = currentWebKitTransform; 673 if (params.roundLengths) slideSize = Math.floor(slideSize); 674 } else { 675 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 676 if (params.roundLengths) slideSize = Math.floor(slideSize); 677 if (slides[i]) slides[i].style[swiper.getDirectionLabel("width")] = `${slideSize}px`; 678 } 679 if (slides[i]) slides[i].swiperSlideSize = slideSize; 680 slidesSizesGrid.push(slideSize); 681 if (params.centeredSlides) { 682 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 683 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 684 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 685 if (Math.abs(slidePosition) < 1 / 1e3) slidePosition = 0; 686 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 687 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 688 slidesGrid.push(slidePosition); 689 } else { 690 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 691 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 692 slidesGrid.push(slidePosition); 693 slidePosition = slidePosition + slideSize + spaceBetween; 694 } 695 swiper.virtualSize += slideSize + spaceBetween; 696 prevSlideSize = slideSize; 697 index += 1; 698 } 699 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 700 if (rtl && wrongRTL && (params.effect === "slide" || params.effect === "coverflow")) wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`; 701 if (params.setWrapperSize) wrapperEl.style[swiper.getDirectionLabel("width")] = `${swiper.virtualSize + spaceBetween}px`; 702 if (gridEnabled) swiper.grid.updateWrapperSize(slideSize, snapGrid); 703 if (!params.centeredSlides) { 704 const newSlidesGrid = []; 705 for (let i = 0; i < snapGrid.length; i += 1) { 706 let slidesGridItem = snapGrid[i]; 707 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
708 if (snapGrid[i] <= swiper.virtualSize - swiperSize) newSlidesGrid.push(slidesGridItem); 709 } 710 snapGrid = newSlidesGrid; 711 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) snapGrid.push(swiper.virtualSize - swiperSize); 712 } 713 if (isVirtual && params.loop) { 714 const size = slidesSizesGrid[0] + spaceBetween; 715 if (params.slidesPerGroup > 1) { 716 const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup); 717 const groupSize = size * params.slidesPerGroup; 718 for (let i = 0; i < groups; i += 1) snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize); 719 } 720 for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) { 721 if (params.slidesPerGroup === 1) snapGrid.push(snapGrid[snapGrid.length - 1] + size); 722 slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size); 723 swiper.virtualSize += size; 724 } 725 } 726 if (snapGrid.length === 0) snapGrid = [ 0 ]; 727 if (spaceBetween !== 0) { 728 const key = swiper.isHorizontal() && rtl ? "marginLeft" : swiper.getDirectionLabel("marginRight"); 729 slides.filter(((_, slideIndex) => { 730 if (!params.cssMode || params.loop) return true; 731 if (slideIndex === slides.length - 1) return false; 732 return true; 733 })).forEach((slideEl => { 734 slideEl.style[key] = `${spaceBetween}px`; 735 })); 736 } 737 if (params.centeredSlides && params.centeredSlidesBounds) { 738 let allSlidesSize = 0; 739 slidesSizesGrid.forEach((slideSizeValue => { 740 allSlidesSize += slideSizeValue + (spaceBetween || 0); 741 })); 742 allSlidesSize -= spaceBetween; 743 const maxSnap = allSlidesSize - swiperSize; 744 snapGrid = snapGrid.map((snap => { 745 if (snap <= 0) return -offsetBefore; 746 if (snap > maxSnap) return maxSnap + offsetAfter; 747 return snap; 748 })); 749 } 750 if (params.centerInsufficientSlides) { 751 let allSlidesSize = 0; 752 slidesSizesGrid.forEach((slideSizeValue => { 753 allSlidesSize += slideSizeValue + (spaceBetween || 0); 754 })); 755 allSlidesSize -= spaceBetween; 756 if (allSlidesSize < swiperSize) { 757 const allSlidesOffset = (swiperSize - allSlidesSize) / 2; 758 snapGrid.forEach(((snap, snapIndex) => { 759 snapGrid[snapIndex] = snap - allSlidesOffset; 760 })); 761 slidesGrid.forEach(((snap, snapIndex) => { 762 slidesGrid[snapIndex] = snap + allSlidesOffset; 763 })); 764 } 765 } 766 Object.assign(swiper, { 767 slides, 768 snapGrid, 769 slidesGrid, 770 slidesSizesGrid 771 }); 772 if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) { 773 utils_setCSSProperty(wrapperEl, "--swiper-centered-offset-before", `${-snapGrid[0]}px`); 774 utils_setCSSProperty(wrapperEl, "--swiper-centered-offset-after", `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`); 775 const addToSnapGrid = -swiper.snapGrid[0]; 776 const addToSlidesGrid = -swiper.slidesGrid[0]; 777 swiper.snapGrid = swiper.snapGrid.map((v => v + addToSnapGrid)); 778 swiper.slidesGrid = swiper.slidesGrid.map((v => v + addToSlidesGrid)); 779 } 780 if (slidesLength !== previousSlidesLength) swiper.emit("slidesLengthChange"); 781 if (snapGrid.length !== previousSnapGridLength) { 782 if (swiper.params.watchOverflow) swiper.checkOverflow(); 783 swiper.emit("snapGridLengthChange"); 784 } 785 if (slidesGrid.length !== previousSlidesGridLength) swiper.emit("slidesGridLengthChange"); 786 if (params.watchSlidesProgress) swiper.updateSlidesOffset(); 787 swiper.emit("slidesUpdated"); 788 if (!isVirtual && !params.cssMode && (params.effect === "slide" || params.effect === "fade")) { 789 const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`; 790 const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass); 791 if (slidesLength <= params.maxBackfaceHiddenSlides) { 792 if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass); 793 } else if (hasClassBackfaceClassAdded) swiper.el.classList.remove(backFaceHiddenClass); 794 } 795 } 796 function updateAutoHeight(speed) { 797 const swiper = this; 798 const activeSlides = []; 799 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 800 let newHeight = 0; 801 let i; 802 if (typeof speed === "number") swiper.setTransition(speed); else if (speed === true) swiper.setTransition(swiper.params.speed); 803 const getSlideByIndex = index => { 804 if (isVirtual) return swiper.slides[swiper.getSlideIndexByData(index)]; 805 return swiper.slides[index]; 806 }; 807 if (swiper.params.slidesPerView !== "auto" && swiper.params.slidesPerView > 1) if (swiper.params.centeredSlides) (swiper.visibleSlides || []).forEac
807h((slide => { 808 activeSlides.push(slide); 809 })); else for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { 810 const index = swiper.activeIndex + i; 811 if (index > swiper.slides.length && !isVirtual) break; 812 activeSlides.push(getSlideByIndex(index)); 813 } else activeSlides.push(getSlideByIndex(swiper.activeIndex)); 814 for (i = 0; i < activeSlides.length; i += 1) if (typeof activeSlides[i] !== "undefined") { 815 const height = activeSlides[i].offsetHeight; 816 newHeight = height > newHeight ? height : newHeight; 817 } 818 if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`; 819 } 820 function updateSlidesOffset() { 821 const swiper = this; 822 const slides = swiper.slides; 823 const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0; 824 for (let i = 0; i < slides.length; i += 1) slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment(); 825 } 826 function updateSlidesProgress(translate) { 827 if (translate === void 0) translate = this && this.translate || 0; 828 const swiper = this; 829 const params = swiper.params; 830 const {slides, rtlTranslate: rtl, snapGrid} = swiper; 831 if (slides.length === 0) return; 832 if (typeof slides[0].swiperSlideOffset === "undefined") swiper.updateSlidesOffset(); 833 let offsetCenter = -translate; 834 if (rtl) offsetCenter = translate; 835 slides.forEach((slideEl => { 836 slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass); 837 })); 838 swiper.visibleSlidesIndexes = []; 839 swiper.visibleSlides = []; 840 let spaceBetween = params.spaceBetween; 841 if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiper.size; else if (typeof spaceBetween === "string") spaceBetween = parseFloat(spaceBetween); 842 for (let i = 0; i < slides.length; i += 1) { 843 const slide = slides[i]; 844 let slideOffset = slide.swiperSlideOffset; 845 if (params.cssMode && params.centeredSlides) slideOffset -= slides[0].swiperSlideOffset; 846 const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 847 const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 848 const slideBefore = -(offsetCenter - slideOffset); 849 const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 850 const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i]; 851 const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 852 if (isVisible) { 853 swiper.visibleSlides.push(slide); 854 swiper.visibleSlidesIndexes.push(i); 855 slides[i].classList.add(params.slideVisibleClass); 856 } 857 if (isFullyVisible) slides[i].classList.add(params.slideFullyVisibleClass); 858 slide.progress = rtl ? -slideProgress : slideProgress; 859 slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress; 860 } 861 } 862 function updateProgress(translate) { 863 const swiper = this; 864 if (typeof translate === "undefined") { 865 const multiplier = swiper.rtlTranslate ? -1 : 1; 866 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 867 } 868 const params = swiper.params; 869 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 870 let {progress, isBeginning, isEnd, progressLoop} = swiper; 871 const wasBeginning = isBeginning; 872 const wasEnd = isEnd; 873 if (translatesDiff === 0) { 874 progress = 0; 875 isBeginning = true; 876 isEnd = true; 877 } else { 878 progress = (translate - swiper.minTranslate()) / translatesDiff; 879 const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1; 880 const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1; 881 isBeginning = isBeginningRounded || progress <= 0; 882 isEnd = isEndRounded || progress >= 1; 883 if (isBeginningRounded) progress = 0; 884 if (isEndRounded) progress = 1; 885 } 886 if (params.loop) { 887 const firstSlideIndex = swiper.getSlideIndexByData(0); 888 const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1); 889 const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex]; 890 const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex]; 891 const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1]; 892 const translateAbs = Math.abs(translate); 893 if (translateAbs >= firstSlideTranslate) progressLoop = (translateAbs - firstSlideTranslate) / translateMax; else progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax; 894 if (progressLoop > 1) progressLoop -= 1; 895 } 896 Object.assign(swiper, { 897 progress, 898 progressLoop, 899 isBeginning, 900 isEnd 901 }); 902 if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 903 if (isBeginning && !wasBeginning) swiper.emit("reachBeginning toEdge"); 904 if (isEnd && !wasEnd) swiper.emit("reachEnd toEdge"); 905 if (wasBeginning && !isBeginning || wasEnd && !isEnd) swiper.emit("fromEdge"); 906 swiper.emit("progress", progress); 907 } 908 function updateSlidesClasses() { 909 const swiper = this; 910 const {slides, params, slidesEl, activeIndex} = swiper; 911 const isVirtual = swiper.virtual && params.virtual.enabled; 912 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 913 const getFilteredSlide = selector => utils_elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
914 slides.forEach((slideEl => { 915 slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 916 })); 917 let activeSlide; 918 let prevSlide; 919 let nextSlide; 920 if (isVirtual) if (params.loop) { 921 let slideIndex = activeIndex - swiper.virtual.slidesBefore; 922 if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex; 923 if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length; 924 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`); 925 } else activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`); else if (gridEnabled) { 926 activeSlide = slides.filter((slideEl => slideEl.column === activeIndex))[0]; 927 nextSlide = slides.filter((slideEl => slideEl.column === activeIndex + 1))[0]; 928 prevSlide = slides.filter((slideEl => slideEl.column === activeIndex - 1))[0]; 929 } else activeSlide = slides[activeIndex]; 930 if (activeSlide) { 931 activeSlide.classList.add(params.slideActiveClass); 932 if (gridEnabled) { 933 if (nextSlide) nextSlide.classList.add(params.slideNextClass); 934 if (prevSlide) prevSlide.classList.add(params.slidePrevClass); 935 } else { 936 nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 937 if (params.loop && !nextSlide) nextSlide = slides[0]; 938 if (nextSlide) nextSlide.classList.add(params.slideNextClass); 939 prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 940 if (params.loop && !prevSlide === 0) prevSlide = slides[slides.length - 1]; 941 if (prevSlide) prevSlide.classList.add(params.slidePrevClass); 942 } 943 } 944 swiper.emitSlidesClasses(); 945 } 946 const processLazyPreloader = (swiper, imageEl) => { 947 if (!swiper || swiper.destroyed || !swiper.params) return; 948 const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 949 const slideEl = imageEl.closest(slideSelector()); 950 if (slideEl) { 951 let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`); 952 if (!lazyEl && swiper.isElement) if (slideEl.shadowRoot) lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); else requestAnimationFrame((() => { 953 if (slideEl.shadowRoot) { 954 lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); 955 if (lazyEl) lazyEl.remove(); 956 } 957 })); 958 if (lazyEl) lazyEl.remove(); 959 } 960 }; 961 const unlazy = (swiper, index) => { 962 if (!swiper.slides[index]) return; 963 const imageEl = swiper.slides[index].querySelector('[loading="lazy"]'); 964 if (imageEl) imageEl.removeAttribute("loading"); 965 }; 966 const preload = swiper => { 967 if (!swiper || swiper.destroyed || !swiper.params) return; 968 let amount = swiper.params.lazyPreloadPrevNext; 969 const len = swiper.slides.length; 970 if (!len || !amount || amount < 0) return; 971 amount = Math.min(amount, len); 972 const slidesPerView = swiper.params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView); 973 const activeIndex = swiper.activeIndex; 974 if (swiper.params.grid && swiper.params.grid.rows > 1) { 975 const activeColumn = activeIndex; 976 const preloadColumns = [ activeColumn - amount ]; 977 preloadColumns.push(...Array.from({ 978 length: amount 979 }).map(((_, i) => activeColumn + slidesPerView + i))); 980 swiper.slides.forEach(((slideEl, i) => { 981 if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i); 982 })); 983 return; 984 } 985 const slideIndexLastInView = activeIndex + slidesPerView - 1; 986 if (swiper.params.rewind || swiper.params.loop) for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) { 987 const realIndex = (i % len + len) % len; 988 if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex); 989 } else for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) unlazy(swiper, i); 990 }; 991 function getActiveIndexByTranslate(swiper) { 992 const {slidesGrid, params} = swiper; 993 const translate = swiper.rtlTranslate ? swiper.translate : -swi
993per.translate; 994 let activeIndex; 995 for (let i = 0; i < slidesGrid.length; i += 1) if (typeof slidesGrid[i + 1] !== "undefined") { 996 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) activeIndex = i; else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) activeIndex = i + 1; 997 } else if (translate >= slidesGrid[i]) activeIndex = i; 998 if (params.normalizeSlideIndex) if (activeIndex < 0 || typeof activeIndex === "undefined") activeIndex = 0; 999 return activeIndex; 1000 } 1001 function updateActiveIndex(newActiveIndex) { 1002 const swiper = this; 1003 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 1004 const {snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex} = swiper; 1005 let activeIndex = newActiveIndex; 1006 let snapIndex; 1007 const getVirtualRealIndex = aIndex => { 1008 let realIndex = aIndex - swiper.virtual.slidesBefore; 1009 if (realIndex < 0) realIndex = swiper.virtual.slides.length + realIndex; 1010 if (realIndex >= swiper.virtual.slides.length) realIndex -= swiper.virtual.slides.length; 1011 return realIndex; 1012 }; 1013 if (typeof activeIndex === "undefined") activeIndex = getActiveIndexByTranslate(swiper); 1014 if (snapGrid.indexOf(translate) >= 0) snapIndex = snapGrid.indexOf(translate); else { 1015 const skip = Math.min(params.slidesPerGroupSkip, activeIndex); 1016 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 1017 } 1018 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 1019 if (activeIndex === previousIndex && !swiper.params.loop) { 1020 if (snapIndex !== previousSnapIndex) { 1021 swiper.snapIndex = snapIndex; 1022 swiper.emit("snapIndexChange"); 1023 } 1024 return; 1025 } 1026 if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 1027 swiper.realIndex = getVirtualRealIndex(activeIndex); 1028 return; 1029 } 1030 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 1031 let realIndex; 1032 if (swiper.virtual && params.virtual.enabled && params.loop) realIndex = getVirtualRealIndex(activeIndex); else if (gridEnabled) { 1033 const firstSlideInColumn = swiper.slides.filter((slideEl => slideEl.column === activeIndex))[0]; 1034 let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute("data-swiper-slide-index"), 10); 1035 if (Number.isNaN(activeSlideIndex)) activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0); 1036 realIndex = Math.floor(activeSlideIndex / params.grid.rows); 1037 } else if (swiper.slides[activeIndex]) { 1038 const slideIndex = swiper.slides[activeIndex].getAttribute("data-swiper-slide-index"); 1039 if (slideIndex) realIndex = parseInt(slideIndex, 10); else realIndex = activeIndex; 1040 } else realIndex = activeIndex; 1041 Object.assign(swiper, { 1042 previousSnapIndex, 1043 snapIndex, 1044 previousRealIndex, 1045 realIndex, 1046 previousIndex, 1047 activeIndex 1048 }); 1049 if (swiper.initialized) preload(swiper); 1050 swiper.emit("activeIndexChange"); 1051 swiper.emit("snapIndexChange"); 1052 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 1053 if (previousRealIndex !== realIndex) swiper.emit("realIndexChange"); 1054 swiper.emit("slideChange"); 1055 } 1056 } 1057 function updateClickedSlide(el, path) { 1058 const swiper = this; 1059 const params = swiper.params; 1060 let slide = el.closest(`.${params.slideClass}, swiper-slide`); 1061 if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) [ ...path.slice(path.indexOf(el) + 1, path.length) ].forEach((pathEl => { 1062 if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) slide = pathEl; 1063 })); 1064 let slideFound = false;
1065 let slideIndex; 1066 if (slide) for (let i = 0; i < swiper.slides.length; i += 1) if (swiper.slides[i] === slide) { 1067 slideFound = true; 1068 slideIndex = i; 1069 break; 1070 } 1071 if (slide && slideFound) { 1072 swiper.clickedSlide = slide; 1073 if (swiper.virtual && swiper.params.virtual.enabled) swiper.clickedIndex = parseInt(slide.getAttribute("data-swiper-slide-index"), 10); else swiper.clickedIndex = slideIndex; 1074 } else { 1075 swiper.clickedSlide = void 0; 1076 swiper.clickedIndex = void 0; 1077 return; 1078 } 1079 if (params.slideToClickedSlide && swiper.clickedIndex !== void 0 && swiper.clickedIndex !== swiper.activeIndex) swiper.slideToClickedSlide(); 1080 } 1081 var update = { 1082 updateSize, 1083 updateSlides, 1084 updateAutoHeight, 1085 updateSlidesOffset, 1086 updateSlidesProgress, 1087 updateProgress, 1088 updateSlidesClasses, 1089 updateActiveIndex, 1090 updateClickedSlide 1091 }; 1092 function getSwiperTranslate(axis) { 1093 if (axis === void 0) axis = this.isHorizontal() ? "x" : "y"; 1094 const swiper = this; 1095 const {params, rtlTranslate: rtl, translate, wrapperEl} = swiper; 1096 if (params.virtualTranslate) return rtl ? -translate : translate; 1097 if (params.cssMode) return translate; 1098 let currentTranslate = utils_getTranslate(wrapperEl, axis); 1099 currentTranslate += swiper.cssOverflowAdjustment(); 1100 if (rtl) currentTranslate = -currentTranslate; 1101 return currentTranslate || 0; 1102 } 1103 function setTranslate(translate, byController) { 1104 const swiper = this; 1105 const {rtlTranslate: rtl, params, wrapperEl, progress} = swiper; 1106 let x = 0; 1107 let y = 0; 1108 const z = 0; 1109 if (swiper.isHorizontal()) x = rtl ? -translate : translate; else y = translate; 1110 if (params.roundLengths) { 1111 x = Math.floor(x); 1112 y = Math.floor(y); 1113 } 1114 swiper.previousTranslate = swiper.translate; 1115 swiper.translate = swiper.isHorizontal() ? x : y; 1116 if (params.cssMode) wrapperEl[swiper.isHorizontal() ? "scrollLeft" : "scrollTop"] = swiper.isHorizontal() ? -x : -y; else if (!params.virtualTranslate) { 1117 if (swiper.isHorizontal()) x -= swiper.cssOverflowAdjustment(); else y -= swiper.cssOverflowAdjustment(); 1118 wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`; 1119 } 1120 let newProgress; 1121 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 1122 if (translatesDiff === 0) newProgress = 0; else newProgress = (translate - swiper.minTranslate()) / translatesDiff; 1123 if (newProgress !== progress) swiper.updateProgress(translate); 1124 swiper.emit("setTranslate", swiper.translate, byController); 1125 } 1126 function minTranslate() { 1127 return -this.snapGrid[0]; 1128 } 1129 function maxTranslate() { 1130 return -this.snapGrid[this.snapGrid.length - 1]; 1131 } 1132 function translateTo(translate, speed, runCallbacks, translateBounds, internal) { 1133 if (translate === void 0) translate = 0; 1134 if (speed === void 0) speed = this.params.speed; 1135 if (runCallbacks === void 0) runCallbacks = true; 1136 if (translateBounds === void 0) translateBounds = true; 1137 const swiper = this; 1138 const {params, wrapperEl} = swiper; 1139 if (swiper.animating && params.preventInteractionOnTransition) return false; 1140 const minTranslate = swiper.minTranslate(); 1141 const maxTranslate = swiper.maxTranslate(); 1142 let newTranslate; 1143 if (translateBounds && translate > minTranslate) newTranslate = minTranslate; else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate; else newTranslate = translate; 1144 swiper.updateProgress(newTranslate); 1145 if (params.cssMode) { 1146 const isH = swiper.isHorizontal(); 1147 if (speed === 0) wrapperEl[isH ? "scrollLeft" : "scrollTop"] = -newTranslate; else { 1148 if (!swiper.support.smoothScroll) { 1149 animateCSSModeScroll({ 1150 swiper, 1151 targetPosition: -newTranslate, 1152 side: isH ? "left" : "top" 1153 }); 1154 return true; 1155 } 1156 wrapperEl.scrollTo({ 1157 [isH ? "left" : "top"]: -newTranslate, 1158 behavior: "smooth" 1159 }); 1160 } 1161 return true; 1162 } 1163 if (speed === 0) { 1164 swiper.setTransition(0); 1165 swiper.setTranslate(newTranslate); 1166 if (runCallbacks) { 1167 swiper.emit("beforeTransitionStart", speed, internal); 1168 swiper.emit("transitionEnd"); 1169 } 1170 } else { 1171 swiper.setTransition(speed); 1172 swiper.setTranslate(newTranslate); 1173 if (runCallbacks) { 1174 swiper.emit("beforeTransitionStart", speed, internal); 1175 swiper.emit("transitionStart"); 1176 } 1177 if (!swiper.animating) { 1178 swiper.animating = true; 1179 if (!swiper.onTranslateToWrapperTransitionEnd) swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 1180 if (!swiper || swiper.destroyed) return; 1181 if (e.target !== this) return; 1182 swiper.wrapperEl.removeEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd); 1183 swiper.onTranslateToWrapperTransitionEnd = null; 1184 delete swiper.onTranslateToWrapperTransitionEnd; 1185 if (runCallbacks) swiper.emit("transitionEnd"); 1186 }; 1187 swiper.wrapperEl.addEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd); 1188 } 1189 } 1190 return true; 1191 } 1192 var translate = { 1193 getTranslate: getSwiperTranslate, 1194 setTranslate, 1195 minTranslate, 1196 maxTranslate, 1197 translateTo 1198 }; 1199 function setTransition(duration, byController) { 1200 const swiper = this; 1201 if (!swiper.params.cssMode) { 1202 swiper.wrapperEl.style.transitionDuration = `${duration}ms`; 1203 swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : ""; 1204 } 1205 swiper.emit("setTransition", duration, byController); 1206 } 1207 function transitionEmit(_ref) { 1208 let {swiper, runCallbacks, direction, step} = _ref; 1209 const {activeIndex, previousIndex} = swiper; 1210 let dir = direction; 1211 if (!dir) if (activeIndex > previousIndex) dir = "next"; else if (activeIndex < previousIndex) dir = "prev"; else dir = "reset"; 1212 swiper.emit(`transition${step}`); 1213 if (runCallbacks && activeIndex !== previousIndex) { 1214 if (dir === "reset") { 1215 swiper.emit(`slideResetTransition${step}`); 1216 return; 1217 } 1218 swiper.emit(`slideChangeTransition${step}`); 1219 if (dir === "next") swiper.emit(`slideNextTransition${step}`); else swiper.emit(`slidePrevTransition${step}`); 1220 } 1221 } 1222 function transitionStart(runCallbacks, direction) { 1223 if (runCallbacks === void 0) runCallbacks = true; 1224 const swiper = this; 1225 const {params} = swiper; 1226 if (params.cssMode) return; 1227 if (params.autoHeight) swiper.updateAutoHeight(); 1228 transitionEmit({ 1229 swiper, 1230 runCallbacks, 1231 direction, 1232 step: "Start" 1233 }); 1234 } 1235 function transitionEnd(runCallbacks, direction) { 1236 if (runCallbacks === void 0) runCallbacks = true; 1237 const swiper = this; 1238 const {params} = swiper; 1239 swiper.animating = false;
1240 if (params.cssMode) return; 1241 swiper.setTransition(0); 1242 transitionEmit({ 1243 swiper, 1244 runCallbacks, 1245 direction, 1246 step: "End" 1247 }); 1248 } 1249 var transition = { 1250 setTransition, 1251 transitionStart, 1252 transitionEnd 1253 }; 1254 function slideTo(index, speed, runCallbacks, internal, initial) { 1255 if (index === void 0) index = 0; 1256 if (speed === void 0) speed = this.params.speed; 1257 if (runCallbacks === void 0) runCallbacks = true; 1258 if (typeof index === "string") index = parseInt(index, 10); 1259 const swiper = this; 1260 let slideIndex = index; 1261 if (slideIndex < 0) slideIndex = 0; 1262 const {params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl, enabled} = swiper; 1263 if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) return false; 1264 const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 1265 let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 1266 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 1267 const translate = -snapGrid[snapIndex]; 1268 if (params.normalizeSlideIndex) for (let i = 0; i < slidesGrid.length; i += 1) { 1269 const normalizedTranslate = -Math.floor(translate * 100); 1270 const normalizedGrid = Math.floor(slidesGrid[i] * 100); 1271 const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); 1272 if (typeof slidesGrid[i + 1] !== "undefined") { 1273 if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) slideIndex = i; else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) slideIndex = i + 1; 1274 } else if (normalizedTranslate >= normalizedGrid) slideIndex = i; 1275 } 1276 if (swiper.initialized && slideIndex !== activeIndex) { 1277 if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) return false; 1278 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) if ((activeIndex || 0) !== slideIndex) return false; 1279 } 1280 if (slideIndex !== (previousIndex || 0) && runCallbacks) swiper.emit("beforeSlideChangeStart"); 1281 swiper.updateProgress(translate); 1282 let direction; 1283 if (slideIndex > activeIndex) direction = "next"; else if (slideIndex < activeIndex) direction = "prev"; else direction = "reset"; 1284 if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { 1285 swiper.updateActiveIndex(slideIndex); 1286 if (params.autoHeight) swiper.updateAutoHeight(); 1287 swiper.updateSlidesClasses(); 1288 if (params.effect !== "slide") swiper.setTranslate(translate); 1289 if (direction !== "reset") { 1290 swiper.transitionStart(runCallbacks, direction); 1291 swiper.transitionEnd(runCallbacks, direction); 1292 } 1293 return false; 1294 } 1295 if (params.cssMode) { 1296 const isH = swiper.isHorizontal(); 1297 const t = rtl ? translate : -translate; 1298 if (speed === 0) { 1299 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 1300 if (isVirtual) { 1301 swiper.wrapperEl.style.scrollSnapType = "none"; 1302 swiper._immediateVirtual = true; 1303 } 1304 if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) { 1305 swiper._cssModeVirtualInitialSet = true; 1306 requestAnimationFrame((() => { 1307 wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t; 1308 })); 1309 } else wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t; 1310 if (isVirtual) requestAnimationFrame((() => { 1311 swiper.wrapperEl.style.scrollSnapType = ""; 1312 swiper._immediateVirtual = false;
1313 })); 1314 } else { 1315 if (!swiper.support.smoothScroll) { 1316 animateCSSModeScroll({ 1317 swiper, 1318 targetPosition: t, 1319 side: isH ? "left" : "top" 1320 }); 1321 return true; 1322 } 1323 wrapperEl.scrollTo({ 1324 [isH ? "left" : "top"]: t, 1325 behavior: "smooth" 1326 }); 1327 } 1328 return true; 1329 } 1330 swiper.setTransition(speed); 1331 swiper.setTranslate(translate); 1332 swiper.updateActiveIndex(slideIndex); 1333 swiper.updateSlidesClasses(); 1334 swiper.emit("beforeTransitionStart", speed, internal); 1335 swiper.transitionStart(runCallbacks, direction); 1336 if (speed === 0) swiper.transitionEnd(runCallbacks, direction); else if (!swiper.animating) { 1337 swiper.animating = true; 1338 if (!swiper.onSlideToWrapperTransitionEnd) swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 1339 if (!swiper || swiper.destroyed) return; 1340 if (e.target !== this) return; 1341 swiper.wrapperEl.removeEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd); 1342 swiper.onSlideToWrapperTransitionEnd = null; 1343 delete swiper.onSlideToWrapperTransitionEnd; 1344 swiper.transitionEnd(runCallbacks, direction); 1345 }; 1346 swiper.wrapperEl.addEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd); 1347 } 1348 return true; 1349 } 1350 function slideToLoop(index, speed, runCallbacks, internal) { 1351 if (index === void 0) index = 0; 1352 if (speed === void 0) speed = this.params.speed; 1353 if (runCallbacks === void 0) runCallbacks = true; 1354 if (typeof index === "string") { 1355 const indexAsNumber = parseInt(index, 10); 1356 index = indexAsNumber; 1357 } 1358 const swiper = this; 1359 const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1; 1360 let newIndex = index; 1361 if (swiper.params.loop) if (swiper.virtual && swiper.params.virtual.enabled) newIndex += swiper.virtual.slidesBefore; else { 1362 let targetSlideIndex; 1363 if (gridEnabled) { 1364 const slideIndex = newIndex * swiper.params.grid.rows; 1365 targetSlideIndex = swiper.slides.filter((slideEl => slideEl.getAttribute("data-swiper-slide-index") * 1 === slideIndex))[0].column; 1366 } else targetSlideIndex = swiper.getSlideIndexByData(newIndex); 1367 const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length; 1368 const {centeredSlides} = swiper.params; 1369 let slidesPerView = swiper.params.slidesPerView; 1370 if (slidesPerView === "auto") slidesPerView = swiper.slidesPerViewDynamic(); else { 1371 slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10)); 1372 if (centeredSlides && slidesPerView % 2 === 0) slidesPerView += 1; 1373 } 1374 let needLoopFix = cols - targetSlideIndex < slidesPerView; 1375 if (centeredSlides) needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2); 1376 if (needLoopFix) { 1377 const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? "prev" : "next" : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? "next" : "prev"; 1378 swiper.loopFix({ 1379 direction, 1380 slideTo: true, 1381 activeSlideIndex: direction === "next" ? targetSlideIndex + 1 : targetSlideIndex - cols + 1, 1382 slideRealIndex: direction === "next" ? swiper.realIndex : void 0 1383 }); 1384 } 1385 if (gridEnabled) { 1386 const slideIndex = newIndex * swiper.params.grid.rows; 1387 newIndex = swiper.slides.filter((slideEl => slideEl.getAttribute("data-swiper-slide-index") * 1 === slideIndex))[0].c
1387olumn; 1388 } else newIndex = swiper.getSlideIndexByData(newIndex); 1389 } 1390 requestAnimationFrame((() => { 1391 swiper.slideTo(newIndex, speed, runCallbacks, internal); 1392 })); 1393 return swiper; 1394 } 1395 function slideNext(speed, runCallbacks, internal) { 1396 if (speed === void 0) speed = this.params.speed; 1397 if (runCallbacks === void 0) runCallbacks = true; 1398 const swiper = this; 1399 const {enabled, params, animating} = swiper; 1400 if (!enabled) return swiper; 1401 let perGroup = params.slidesPerGroup; 1402 if (params.slidesPerView === "auto" && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) perGroup = Math.max(swiper.slidesPerViewDynamic("current", true), 1); 1403 const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; 1404 const isVirtual = swiper.virtual && params.virtual.enabled; 1405 if (params.loop) { 1406 if (animating && !isVirtual && params.loopPreventsSliding) return false; 1407 swiper.loopFix({ 1408 direction: "next" 1409 }); 1410 swiper._clientLeft = swiper.wrapperEl.clientLeft; 1411 if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) { 1412 requestAnimationFrame((() => { 1413 swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 1414 })); 1415 return true; 1416 } 1417 } 1418 if (params.rewind && swiper.isEnd) return swiper.slideTo(0, speed, runCallbacks, internal); 1419 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 1420 } 1421 function slidePrev(speed, runCallbacks, internal) { 1422 if (speed === void 0) speed = this.params.speed; 1423 if (runCallbacks === void 0) runCallbacks = true; 1424 const swiper = this; 1425 const {params, snapGrid, slidesGrid, rtlTranslate, enabled, animating} = swiper; 1426 if (!enabled) return swiper; 1427 const isVirtual = swiper.virtual && params.virtual.enabled; 1428 if (params.loop) { 1429 if (animating && !isVirtual && params.loopPreventsSliding) return false; 1430 swiper.loopFix({ 1431 direction: "prev" 1432 }); 1433 swiper._clientLeft = swiper.wrapperEl.clientLeft; 1434 } 1435 const translate = rtlTranslate ? swiper.translate : -swiper.translate; 1436 function normalize(val) { 1437 if (val < 0) return -Math.floor(Math.abs(val)); 1438 return Math.floor(val); 1439 } 1440 const normalizedTranslate = normalize(translate); 1441 const normalizedSnapGrid = snapGrid.map((val => normalize(val))); 1442 let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 1443 if (typeof prevSnap === "undefined" && params.cssMode) { 1444 let prevSnapIndex; 1445 snapGrid.forEach(((snap, snapIndex) => { 1446 if (normalizedTranslate >= snap) prevSnapIndex = snapIndex; 1447 })); 1448 if (typeof prevSnapIndex !== "undefined") prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; 1449 } 1450 let prevIndex = 0; 1451 if (typeof prevSnap !== "undefined") { 1452 prevIndex = slidesGrid.indexOf(prevSnap); 1453 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 1454 if (params.slidesPerView === "auto" && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 1455 prevIndex = prevIndex - swiper.slidesPerViewDynamic("previous", true) + 1; 1456 prevIndex = Math.max(prevIndex, 0); 1457 } 1458 } 1459 if (params.rewind && swiper.isBeginning) { 1460 const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 1461 return swiper.slideTo(lastIndex, speed, runCallbacks, internal); 1462 } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) { 1463 requestAnimationFrame((() => { 1464 swiper.slideTo(prevIndex, speed, runCallbacks, internal); 1465 })); 1466 return true; 1467 } 1468 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 1469 } 1470 function slideReset(speed, runCallbacks, internal) { 1471 if (speed === void 0) speed = this.params.speed; 1472 if (runCallbacks === void 0) runCallbacks = true; 1473 const swiper = this; 1474 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 1475 } 1476 function slideToClosest(speed, runCallbacks, internal, threshold) { 1477 if (speed === void 0) speed = this.params.speed; 1478 if (runCallbacks === void 0) runCallbacks = true; 1479 if (threshold === void 0) threshold = .5; 1480 const swiper = this; 1481 let index = swiper.activeIndex; 1482 const skip = Math.min(swiper.params.slidesPerGroupSkip, index); 1483 const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 1484 const translate = swiper.rtlTranslate ? swiper.translate : -swi
1484per.translate; 1485 if (translate >= swiper.snapGrid[snapIndex]) { 1486 const currentSnap = swiper.snapGrid[snapIndex]; 1487 const nextSnap = swiper.snapGrid[snapIndex + 1]; 1488 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) index += swiper.params.slidesPerGroup; 1489 } else { 1490 const prevSnap = swiper.snapGrid[snapIndex - 1]; 1491 const currentSnap = swiper.snapGrid[snapIndex]; 1492 if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) index -= swiper.params.slidesPerGroup; 1493 } 1494 index = Math.max(index, 0); 1495 index = Math.min(index, swiper.slidesGrid.length - 1); 1496 return swiper.slideTo(index, speed, runCallbacks, internal); 1497 } 1498 function slideToClickedSlide() { 1499 const swiper = this; 1500 const {params, slidesEl} = swiper; 1501 const slidesPerView = params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : params.slidesPerView; 1502 let slideToIndex = swiper.clickedIndex; 1503 let realIndex; 1504 const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`; 1505 if (params.loop) { 1506 if (swiper.animating) return; 1507 realIndex = parseInt(swiper.clickedSlide.getAttribute("data-swiper-slide-index"), 10); 1508 if (params.centeredSlides) if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 1509 swiper.loopFix(); 1510 slideToIndex = swiper.getSlideIndex(utils_elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 1511 utils_nextTick((() => { 1512 swiper.slideTo(slideToIndex); 1513 })); 1514 } else swiper.slideTo(slideToIndex); else if (slideToIndex > swiper.slides.length - slidesPerView) { 1515 swiper.loopFix(); 1516 slideToIndex = swiper.getSlideIndex(utils_elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 1517 utils_nextTick((() => { 1518 swiper.slideTo(slideToIndex); 1519 })); 1520 } else swiper.slideTo(slideToIndex); 1521 } else swiper.slideTo(slideToIndex); 1522 } 1523 var slide = { 1524 slideTo, 1525 slideToLoop, 1526 slideNext, 1527 slidePrev, 1528 slideReset, 1529 slideToClosest, 1530 slideToClickedSlide 1531 }; 1532 function loopCreate(slideRealIndex) { 1533 const swiper = this; 1534 const {params, slidesEl} = swiper; 1535 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 1536 const initSlides = () => { 1537 const slides = utils_elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 1538 slides.forEach(((el, index) => { 1539 el.setAttribute("data-swiper-slide-index", index); 1540 })); 1541 }; 1542 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 1543 const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1); 1544 const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0; 1545 const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0; 1546 const addBlankSlides = amountOfSlides => { 1547 for (let i = 0; i < amountOfSlides; i += 1) { 1548 const slideEl = swiper.isElement ? utils_createElement("swiper-slide", [ params.slideBlankClass ]) : utils_createElement("div", [ params.slideClass, params.slideBlankClass ]); 1549 swiper.slidesEl.append(slideEl); 1550 } 1551 }; 1552 if (shouldFillGroup) { 1553 if (params.loopAddBlankSlides) { 1554 const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup; 1555 addBlankSlides(slidesToAdd); 1556 swiper.recalcSlides(); 1557 swiper.updateSlides(); 1558 } else showWarning("Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)"); 1559 initSlides(); 1560 } else if (shouldFillGrid) { 1561 if (params.loopAddBlankSlides) { 1562 const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows; 1563 addBlankSlides(slidesToAdd); 1564 swiper.recalcSlides(); 1565 swiper.updateSlides(); 1566 } else showWarning("Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may
1566not function properly. You need to add more slides (or make duplicates, or empty slides)"); 1567 initSlides(); 1568 } else initSlides(); 1569 swiper.loopFix({ 1570 slideRealIndex, 1571 direction: params.centeredSlides ? void 0 : "next" 1572 }); 1573 } 1574 function loopFix(_temp) { 1575 let {slideRealIndex, slideTo = true, direction, setTranslate, activeSlideIndex, byController, byMousewheel} = _temp === void 0 ? {} : _temp; 1576 const swiper = this; 1577 if (!swiper.params.loop) return; 1578 swiper.emit("beforeLoopFix"); 1579 const {slides, allowSlidePrev, allowSlideNext, slidesEl, params} = swiper; 1580 const {centeredSlides} = params; 1581 swiper.allowSlidePrev = true; 1582 swiper.allowSlideNext = true; 1583 if (swiper.virtual && params.virtual.enabled) { 1584 if (slideTo) if (!params.centeredSlides && swiper.snapIndex === 0) swiper.slideTo(swiper.virtual.slides.length, 0, false, true); else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true); else if (swiper.snapIndex === swiper.snapGrid.length - 1) swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true); 1585 swiper.allowSlidePrev = allowSlidePrev; 1586 swiper.allowSlideNext = allowSlideNext; 1587 swiper.emit("loopFix"); 1588 return; 1589 } 1590 let slidesPerView = params.slidesPerView; 1591 if (slidesPerView === "auto") slidesPerView = swiper.slidesPerViewDynamic(); else { 1592 slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10)); 1593 if (centeredSlides && slidesPerView % 2 === 0) slidesPerView += 1; 1594 } 1595 const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup; 1596 let loopedSlides = slidesPerGroup; 1597 if (loopedSlides % slidesPerGroup !== 0) loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup; 1598 loopedSlides += params.loopAdditionalSlides; 1599 swiper.loopedSlides = loopedSlides; 1600 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 1601 if (slides.length < slidesPerView + loopedSlides) showWarning("Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters"); else if (gridEnabled && params.grid.fill === "row") showWarning("Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`"); 1602 const prependSlidesIndexes = []; 1603 const appendSlidesIndexes = []; 1604 let activeIndex = swiper.activeIndex; 1605 if (typeof activeSlideIndex === "undefined") activeSlideIndex = swiper.getSlideIndex(slides.filter((el => el.classList.contains(params.slideActiveClass)))[0]); else activeIndex = activeSlideIndex; 1606 const isNext = direction === "next" || !direction; 1607 const isPrev = direction === "prev" || !direction; 1608 let slidesPrepended = 0; 1609 let slidesAppended = 0; 1610 const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length; 1611 const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex; 1612 const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === "undefined" ? -slidesPerView / 2 + .5 : 0); 1613 if (activeColIndexWithShift < loopedSlides) { 1614 slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup); 1615 for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) { 1616 const index = i - Math.floor(i / cols) * cols; 1617 if (gridEnabled) { 1618 const colIndexToPrepend = cols - index - 1; 1619 for (let i = slides.length - 1; i >= 0; i -= 1) if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i); 1620 } else prependSlidesIndexes.push(cols - index - 1); 1621 } 1622 } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) { 1623 slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup); 1624 for (let i = 0; i < slidesAppended; i += 1) {
1625 const index = i - Math.floor(i / cols) * cols; 1626 if (gridEnabled) slides.forEach(((slide, slideIndex) => { 1627 if (slide.column === index) appendSlidesIndexes.push(slideIndex); 1628 })); else appendSlidesIndexes.push(index); 1629 } 1630 } 1631 swiper.__preventObserver__ = true; 1632 requestAnimationFrame((() => { 1633 swiper.__preventObserver__ = false; 1634 })); 1635 if (isPrev) prependSlidesIndexes.forEach((index => { 1636 slides[index].swiperLoopMoveDOM = true; 1637 slidesEl.prepend(slides[index]); 1638 slides[index].swiperLoopMoveDOM = false; 1639 })); 1640 if (isNext) appendSlidesIndexes.forEach((index => { 1641 slides[index].swiperLoopMoveDOM = true; 1642 slidesEl.append(slides[index]); 1643 slides[index].swiperLoopMoveDOM = false; 1644 })); 1645 swiper.recalcSlides(); 1646 if (params.slidesPerView === "auto") swiper.updateSlides(); else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) swiper.slides.forEach(((slide, slideIndex) => { 1647 swiper.grid.updateSlide(slideIndex, slide, swiper.slides); 1648 })); 1649 if (params.watchSlidesProgress) swiper.updateSlidesOffset(); 1650 if (slideTo) if (prependSlidesIndexes.length > 0 && isPrev) { 1651 if (typeof slideRealIndex === "undefined") { 1652 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 1653 const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended]; 1654 const diff = newSlideTranslate - currentSlideTranslate; 1655 if (byMousewheel) swiper.setTranslate(swiper.translate - diff); else { 1656 swiper.slideTo(activeIndex + slidesPrepended, 0, false, true); 1657 if (setTranslate) { 1658 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 1659 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 1660 } 1661 } 1662 } else if (setTranslate) { 1663 const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length; 1664 swiper.slideTo(swiper.activeIndex + shift, 0, false, true); 1665 swiper.touchEventsData.currentTranslate = swiper.translate; 1666 } 1667 } else if (appendSlidesIndexes.length > 0 && isNext) if (typeof slideRealIndex === "undefined") { 1668 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 1669 const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended]; 1670 const diff = newSlideTranslate - currentSlideTranslate; 1671 if (byMousewheel) swiper.setTranslate(swiper.translate - diff); else { 1672 swiper.slideTo(activeIndex - slidesAppended, 0, false, true); 1673 if (setTranslate) { 1674 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 1675 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 1676 } 1677 } 1678 } else { 1679 const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length; 1680 swiper.slideTo(swiper.activeIndex - shift, 0, false, true); 1681 } 1682 swiper.allowSlidePrev = allowSlidePrev; 1683 swiper.allowSlideNext = allowSlideNext; 1684 if (swiper.controller && swiper.controller.control && !byController) { 1685 const loopParams = { 1686 slideRealIndex, 1687 direction, 1688 setTranslate, 1689 activeSlideIndex, 1690 byController: true 1691 }; 1692 if (Array.isArray(swiper.controller.control)) swiper.controller.control.forEach((c => { 1693 if (!c.destroyed && c.params.loop) c.loopFix({ 1694 ...loopParams, 1695 slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false 1696 }); 1697 })); else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) swiper.controller.control.loopFix({ 1698 ...loopParams, 1699 slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false 1700 }); 1701 } 1702 swiper.emit("loopFix"); 1703 } 1704 function loopDestroy() { 1705 const swiper = this; 1706 const {params, slidesEl} = swiper; 1707 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 1708 swiper.recalcSlides(); 1709 const newSlidesOrder = [];
1710 swiper.slides.forEach((slideEl => { 1711 const index = typeof slideEl.swiperSlideIndex === "undefined" ? slideEl.getAttribute("data-swiper-slide-index") * 1 : slideEl.swiperSlideIndex; 1712 newSlidesOrder[index] = slideEl; 1713 })); 1714 swiper.slides.forEach((slideEl => { 1715 slideEl.removeAttribute("data-swiper-slide-index"); 1716 })); 1717 newSlidesOrder.forEach((slideEl => { 1718 slidesEl.append(slideEl); 1719 })); 1720 swiper.recalcSlides(); 1721 swiper.slideTo(swiper.realIndex, 0); 1722 } 1723 var loop = { 1724 loopCreate, 1725 loopFix, 1726 loopDestroy 1727 }; 1728 function setGrabCursor(moving) { 1729 const swiper = this; 1730 if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 1731 const el = swiper.params.touchEventsTarget === "container" ? swiper.el : swiper.wrapperEl; 1732 if (swiper.isElement) swiper.__preventObserver__ = true; 1733 el.style.cursor = "move"; 1734 el.style.cursor = moving ? "grabbing" : "grab"; 1735 if (swiper.isElement) requestAnimationFrame((() => { 1736 swiper.__preventObserver__ = false; 1737 })); 1738 } 1739 function unsetGrabCursor() { 1740 const swiper = this; 1741 if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 1742 if (swiper.isElement) swiper.__preventObserver__ = true; 1743 swiper[swiper.params.touchEventsTarget === "container" ? "el" : "wrapperEl"].style.cursor = ""; 1744 if (swiper.isElement) requestAnimationFrame((() => { 1745 swiper.__preventObserver__ = false; 1746 })); 1747 } 1748 var grabCursor = { 1749 setGrabCursor, 1750 unsetGrabCursor 1751 }; 1752 function closestElement(selector, base) { 1753 if (base === void 0) base = this; 1754 function __closestFrom(el) { 1755 if (!el || el === ssr_window_esm_getDocument() || el === ssr_window_esm_getWindow()) return null; 1756 if (el.assignedSlot) el = el.assignedSlot; 1757 const found = el.closest(selector); 1758 if (!found && !el.getRootNode) return null; 1759 return found || __closestFrom(el.getRootNode().host); 1760 } 1761 return __closestFrom(base); 1762 } 1763 function preventEdgeSwipe(swiper, event, startX) { 1764 const window = ssr_window_esm_getWindow(); 1765 const {params} = swiper; 1766 const edgeSwipeDetection = params.edgeSwipeDetection; 1767 const edgeSwipeThreshold = params.edgeSwipeThreshold; 1768 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { 1769 if (edgeSwipeDetection === "prevent") { 1770 event.preventDefault(); 1771 return true; 1772 } 1773 return false; 1774 } 1775 return true; 1776 } 1777 function onTouchStart(event) { 1778 const swiper = this; 1779 const document = ssr_window_esm_getDocument(); 1780 let e = event; 1781 if (e.originalEvent) e = e.originalEvent; 1782 const data = swiper.touchEventsData; 1783 if (e.type === "pointerdown") { 1784 if (data.pointerId !== null && data.pointerId !== e.pointerId) return; 1785 data.pointerId = e.pointerId; 1786 } else if (e.type === "touchstart" && e.targetTouches.length === 1) data.touchId = e.targetTouches[0].identifier; 1787 if (e.type === "touchstart") { 1788 preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX); 1789 return; 1790 } 1791 const {params, touches, enabled} = swiper; 1792 if (!enabled) return; 1793 if (!params.simulateTouch && e.pointerType === "mouse") return; 1794 if (swiper.animating && params.preventInteractionOnTransition) return; 1795 if (!swiper.animating && params.cssMode && params.loop) swiper.loopFix(); 1796 let targetEl = e.target; 1797 if (params.touchEventsTarget === "wrapper") if (!swiper.wrapperEl.contains(targetEl)) return; 1798 if ("which" in e && e.which === 3) return; 1799 if ("button" in e && e.button > 0) return; 1800 if (data.isTouched && data.isMoved) return; 1801 const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ""; 1802 const eventPath = e.composedPath ? e.composedPath() : e.path; 1803 if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) targetEl = eventPath[0]; 1804 const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`; 1805 const isTargetShadow = !!(e.target && e.target.shadowRoot); 1806 if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) { 1807 swiper.allowClick = true; 1808 return; 1809 } 1810 if (params.swipeHandler) if (!targetEl.closest(params.swipeHandler)) return; 1811 touches.currentX = e.pageX; 1812 touches.currentY = e.pageY; 1813 const startX = touches.currentX; 1814 const startY = touches.currentY; 1815 if (!preventEdgeSwipe(swiper, e, startX)) return; 1816 Object.assign(data, { 1817 isTouched: true, 1818 isMoved: false, 1819 allowTouchCallbacks: true, 1820 isScrolling: void 0, 1821 startMoving: void 0 1822 }); 1823 touches.startX = startX; 1824 touches.startY = startY; 1825 data.touchStartTime = utils_now(); 1826 swiper.allowClick = true; 1827 swiper.updateSize(); 1828 swiper.swipeDirection = void 0; 1829 if (params.threshold > 0) data.allowThresholdMove = false;
1830 let preventDefault = true; 1831 if (targetEl.matches(data.focusableElements)) { 1832 preventDefault = false; 1833 if (targetEl.nodeName === "SELECT") data.isTouched = false; 1834 } 1835 if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) document.activeElement.blur(); 1836 const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 1837 if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) e.preventDefault(); 1838 if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) swiper.freeMode.onTouchStart(); 1839 swiper.emit("touchStart", e); 1840 } 1841 function onTouchMove(event) { 1842 const document = ssr_window_esm_getDocument(); 1843 const swiper = this; 1844 const data = swiper.touchEventsData; 1845 const {params, touches, rtlTranslate: rtl, enabled} = swiper; 1846 if (!enabled) return; 1847 if (!params.simulateTouch && event.pointerType === "mouse") return; 1848 let e = event; 1849 if (e.originalEvent) e = e.originalEvent; 1850 if (e.type === "pointermove") { 1851 if (data.touchId !== null) return; 1852 const id = e.pointerId; 1853 if (id !== data.pointerId) return; 1854 } 1855 let targetTouch; 1856 if (e.type === "touchmove") { 1857 targetTouch = [ ...e.changedTouches ].filter((t => t.identifier === data.touchId))[0]; 1858 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 1859 } else targetTouch = e; 1860 if (!data.isTouched) { 1861 if (data.startMoving && data.isScrolling) swiper.emit("touchMoveOpposite", e); 1862 return; 1863 } 1864 const pageX = targetTouch.pageX; 1865 const pageY = targetTouch.pageY; 1866 if (e.preventedByNestedSwiper) { 1867 touches.startX = pageX; 1868 touches.startY = pageY; 1869 return; 1870 } 1871 if (!swiper.allowTouchMove) { 1872 if (!e.target.matches(data.focusableElements)) swiper.allowClick = false; 1873 if (data.isTouched) { 1874 Object.assign(touches, { 1875 startX: pageX, 1876 startY: pageY, 1877 currentX: pageX, 1878 currentY: pageY 1879 }); 1880 data.touchStartTime = utils_now(); 1881 } 1882 return; 1883 } 1884 if (params.touchReleaseOnEdges && !params.loop) if (swiper.isVertical()) { 1885 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 1886 data.isTouched = false; 1887 data.isMoved = false; 1888 return; 1889 } 1890 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) return; 1891 if (document.activeElement) if (e.target === document.activeElement && e.target.matches(data.focusableElements)) { 1892 data.isMoved = true; 1893 swiper.allowClick = false; 1894 return; 1895 } 1896 if (data.allowTouchCallbacks) swiper.emit("touchMove", e); 1897 touches.previousX = touches.currentX; 1898 touches.previousY = touches.currentY; 1899 touches.currentX = pageX; 1900 touches.currentY = pageY; 1901 const diffX = touches.currentX - touches.startX; 1902 const diffY = touches.currentY - touches.startY; 1903 if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return; 1904 if (typeof data.isScrolling === "undefined") { 1905 let touchAngle; 1906 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) data.isScrolling = false; else if (diffX * diffX + diffY * diffY >= 25) { 1907 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 1908 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 1909 } 1910 } 1911 if (data.isScrolling) swiper.emit("touchMoveOpposite", e); 1912 if (typeof data.startMoving === "undefined") if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) data.startMoving = true; 1913 if (data.isScrolling) { 1914 data.isTouched = false;
1915 return; 1916 } 1917 if (!data.startMoving) return; 1918 swiper.allowClick = false; 1919 if (!params.cssMode && e.cancelable) e.preventDefault(); 1920 if (params.touchMoveStopPropagation && !params.nested) e.stopPropagation(); 1921 let diff = swiper.isHorizontal() ? diffX : diffY; 1922 let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY; 1923 if (params.oneWayMovement) { 1924 diff = Math.abs(diff) * (rtl ? 1 : -1); 1925 touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1); 1926 } 1927 touches.diff = diff; 1928 diff *= params.touchRatio; 1929 if (rtl) { 1930 diff = -diff; 1931 touchesDiff = -touchesDiff; 1932 } 1933 const prevTouchesDirection = swiper.touchesDirection; 1934 swiper.swipeDirection = diff > 0 ? "prev" : "next"; 1935 swiper.touchesDirection = touchesDiff > 0 ? "prev" : "next"; 1936 const isLoop = swiper.params.loop && !params.cssMode; 1937 const allowLoopFix = swiper.touchesDirection === "next" && swiper.allowSlideNext || swiper.touchesDirection === "prev" && swiper.allowSlidePrev; 1938 if (!data.isMoved) { 1939 if (isLoop && allowLoopFix) swiper.loopFix({ 1940 direction: swiper.swipeDirection 1941 }); 1942 data.startTranslate = swiper.getTranslate(); 1943 swiper.setTransition(0); 1944 if (swiper.animating) { 1945 const evt = new window.CustomEvent("transitionend", { 1946 bubbles: true, 1947 cancelable: true 1948 }); 1949 swiper.wrapperEl.dispatchEvent(evt); 1950 } 1951 data.allowMomentumBounce = false; 1952 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) swiper.setGrabCursor(true); 1953 swiper.emit("sliderFirstMove", e); 1954 } 1955 let loopFixed; 1956 (new Date).getTime(); 1957 if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) { 1958 Object.assign(touches, { 1959 startX: pageX, 1960 startY: pageY, 1961 currentX: pageX, 1962 currentY: pageY, 1963 startTranslate: data.currentTranslate 1964 }); 1965 data.loopSwapReset = true; 1966 data.startTranslate = data.currentTranslate; 1967 return; 1968 } 1969 swiper.emit("sliderMove", e); 1970 data.isMoved = true; 1971 data.currentTranslate = diff + data.startTranslate; 1972 let disableParentSwiper = true; 1973 let resistanceRatio = params.resistanceRatio; 1974 if (params.touchReleaseOnEdges) resistanceRatio = 0; 1975 if (diff > 0) { 1976 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) swiper.loopFix({ 1977 direction: "prev", 1978 setTranslate: true, 1979 activeSlideIndex: 0 1980 }); 1981 if (data.currentTranslate > swiper.minTranslate()) { 1982 disableParentSwiper = false;
1983 if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio; 1984 } 1985 } else if (diff < 0) { 1986 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) swiper.loopFix({ 1987 direction: "next", 1988 setTranslate: true, 1989 activeSlideIndex: swiper.slides.length - (params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10))) 1990 }); 1991 if (data.currentTranslate < swiper.maxTranslate()) { 1992 disableParentSwiper = false; 1993 if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio; 1994 } 1995 } 1996 if (disableParentSwiper) e.preventedByNestedSwiper = true; 1997 if (!swiper.allowSlideNext && swiper.swipeDirection === "next" && data.currentTranslate < data.startTranslate) data.currentTranslate = data.startTranslate; 1998 if (!swiper.allowSlidePrev && swiper.swipeDirection === "prev" && data.currentTranslate > data.startTranslate) data.currentTranslate = data.startTranslate; 1999 if (!swiper.allowSlidePrev && !swiper.allowSlideNext) data.currentTranslate = data.startTranslate; 2000 if (params.threshold > 0) if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 2001 if (!data.allowThresholdMove) { 2002 data.allowThresholdMove = true; 2003 touches.startX = touches.currentX; 2004 touches.startY = touches.currentY; 2005 data.currentTranslate = data.startTranslate; 2006 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 2007 return; 2008 } 2009 } else { 2010 data.currentTranslate = data.startTranslate; 2011 return; 2012 } 2013 if (!params.followFinger || params.cssMode) return; 2014 if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) { 2015 swiper.updateActiveIndex(); 2016 swiper.updateSlidesClasses(); 2017 } 2018 if (params.freeMode && params.freeMode.enabled && swiper.freeMode) swiper.freeMode.onTouchMove(); 2019 swiper.updateProgress(data.currentTranslate); 2020 swiper.setTranslate(data.currentTranslate); 2021 } 2022 function onTouchEnd(event) { 2023 const swiper = this; 2024 const data = swiper.touchEventsData; 2025 let e = event; 2026 if (e.originalEvent) e = e.originalEvent; 2027 let targetTouch; 2028 const isTouchEvent = e.type === "touchend" || e.type === "touchcancel"; 2029 if (!isTouchEvent) { 2030 if (data.touchId !== null) return; 2031 if (e.pointerId !== data.pointerId) return; 2032 targetTouch = e; 2033 } else { 2034 targetTouch = [ ...e.changedTouches ].filter((t => t.identifier === data.touchId))[0]; 2035 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 2036 } 2037 if ([ "pointercancel", "pointerout", "pointerleave", "contextmenu" ].includes(e.type)) { 2038 const proceed = [ "pointercancel", "contextmenu" ].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView); 2039 if (!proceed) return; 2040 } 2041 data.pointerId = null; 2042 data.touchId = null; 2043 const {params, touches, rtlTranslate: rtl, slidesGrid, enabled} = swiper; 2044 if (!enabled) return; 2045 if (!params.simulateTouch && e.pointerType === "mouse") return; 2046 if (data.allowTouchCallbacks) swiper.emit("touchEnd", e); 2047 data.allowTouchCallbacks = false; 2048 if (!data.isTouched) { 2049 if (data.isMoved && params.grabCursor) swiper.setGrabCursor(false); 2050 data.isMoved = false; 2051 data.startMoving = false; 2052 return; 2053 } 2054 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) swiper.setGrabCursor(false); 2055 const touchEndTime = utils_now(); 2056 const timeDiff = touchEndTime - data.touchStartTime; 2057 if (swiper.allowClick) { 2058 const pathTree = e.path || e.composedPath && e.composedPath(); 2059 swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree); 2060 swiper.emit("tap click", e); 2061 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) swiper.emit("doubleTap doubleClick", e); 2062 } 2063 data.lastClickTime = utils_now(); 2064 utils_nextTick((() => { 2065 if (!swiper.destroyed) swiper.allowClick = true; 2066 })); 2067 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) { 2068 data.isTouched = false;
2069 data.isMoved = false; 2070 data.startMoving = false; 2071 return; 2072 } 2073 data.isTouched = false; 2074 data.isMoved = false; 2075 data.startMoving = false; 2076 let currentPos; 2077 if (params.followFinger) currentPos = rtl ? swiper.translate : -swiper.translate; else currentPos = -data.currentTranslate; 2078 if (params.cssMode) return; 2079 if (params.freeMode && params.freeMode.enabled) { 2080 swiper.freeMode.onTouchEnd({ 2081 currentPos 2082 }); 2083 return; 2084 } 2085 const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop; 2086 let stopIndex = 0; 2087 let groupSize = swiper.slidesSizesGrid[0]; 2088 for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 2089 const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 2090 if (typeof slidesGrid[i + increment] !== "undefined") { 2091 if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { 2092 stopIndex = i; 2093 groupSize = slidesGrid[i + increment] - slidesGrid[i]; 2094 } 2095 } else if (swipeToLast || currentPos >= slidesGrid[i]) { 2096 stopIndex = i; 2097 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 2098 } 2099 } 2100 let rewindFirstIndex = null; 2101 let rewindLastIndex = null; 2102 if (params.rewind) if (swiper.isBeginning) rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; else if (swiper.isEnd) rewindFirstIndex = 0; 2103 const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 2104 const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 2105 if (timeDiff > params.longSwipesMs) { 2106 if (!params.longSwipes) { 2107 swiper.slideTo(swiper.activeIndex); 2108 return; 2109 } 2110 if (swiper.swipeDirection === "next") if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment); else swiper.slideTo(stopIndex); 2111 if (swiper.swipeDirection === "prev") if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment); else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) swiper.slideTo(rewindLastIndex); else swiper.slideTo(stopIndex); 2112 } else { 2113 if (!params.shortSwipes) { 2114 swiper.slideTo(swiper.activeIndex); 2115 return; 2116 } 2117 const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 2118 if (!isNavButtonTarget) { 2119 if (swiper.swipeDirection === "next") swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment); 2120 if (swiper.swipeDirection === "prev") swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex); 2121 } else if (e.target === swiper.navigation.nextEl) swiper.slideTo(stopIndex + increment); else swiper.slideTo(stopIndex); 2122 } 2123 } 2124 function onResize() { 2125 const swiper = this; 2126 const {params, el} = swiper; 2127 if (el && el.offsetWidth === 0) return; 2128 if (params.breakpoints) swiper.setBreakpoint(); 2129 const {allowSlideNext, allowSlidePrev, snapGrid} = swiper; 2130 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 2131 swiper.allowSlideNext = true; 2132 swiper.allowSlidePrev = true; 2133 swiper.updateSize(); 2134 swiper.updateSlides(); 2135 swiper.updateSlidesClasses(); 2136 const isVirtualLoop = isVirtual && params.loop; 2137 if ((params.slidesPerView === "auto" || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) swiper.slideTo(swiper.slides.length - 1, 0, false, true); else if (swiper.params.loop && !isVirtual) swiper.slideToLoop(swiper.realIndex, 0, false, true); else swiper.slideTo(swiper.activeIndex, 0, false, true); 2138 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 2139 clearTimeout(swiper.autoplay.resizeTimeout); 2140 swiper.autoplay.resizeTimeout = setTimeout((() => { 2141 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) swiper.autoplay.resume(); 2142 }), 500); 2143 } 2144 swiper.allowSlidePrev = allowSlidePrev; 2145 swiper.allowSlideNext = allowSlideNext; 2146 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) swiper.checkOverflow(); 2147 } 2148 function onClick(e) { 2149 const swiper = this; 2150 if (!swiper.enabled) return; 2151 if (!swiper.allowClick) { 2152 if (swiper.params.preventClicks) e.preventDefault(); 2153 if (swiper.params.preventClicksPropagation && swiper.animating) { 2154 e.stopPropagation(); 2155 e.stopImmediatePropagation(); 2156 } 2157 } 2158 } 2159 function onScroll() { 2160 const swiper = this; 2161 const {wrapperEl, rtlTranslate, enabled} = swiper; 2162 if (!enabled) return; 2163 swiper.previousTranslate = swiper.translate; 2164 if (swiper.isHorizontal()) swiper.translate = -wrapperEl.scrollLeft; else swiper.translate = -wrapperEl.scrollTop; 2165 if (swiper.translate === 0) swiper.translate = 0; 2166 swiper.updateActiveIndex(); 2167 swiper.updateSlidesClasses(); 2168 let newProgress; 2169 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 2170 if (translatesDiff === 0) newProgress = 0; else newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 2171 if (newProgress !== swiper.progress) swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 2172 swiper.emit("setTranslate", swiper.translate, false); 2173 } 2174 function onLoad(e) { 2175 const swiper = this; 2176 processLazyPreloader(swiper, e.target); 2177 if (swiper.params.cssMode || swiper.params.slidesPerView !== "auto" && !swiper.params.autoHeight) return;
2178 swiper.update(); 2179 } 2180 function onDocumentTouchStart() { 2181 const swiper = this; 2182 if (swiper.documentTouchHandlerProceeded) return; 2183 swiper.documentTouchHandlerProceeded = true; 2184 if (swiper.params.touchReleaseOnEdges) swiper.el.style.touchAction = "auto"; 2185 } 2186 const events = (swiper, method) => { 2187 const document = ssr_window_esm_getDocument(); 2188 const {params, el, wrapperEl, device} = swiper; 2189 const capture = !!params.nested; 2190 const domMethod = method === "on" ? "addEventListener" : "removeEventListener"; 2191 const swiperMethod = method; 2192 document[domMethod]("touchstart", swiper.onDocumentTouchStart, { 2193 passive: false, 2194 capture 2195 }); 2196 el[domMethod]("touchstart", swiper.onTouchStart, { 2197 passive: false 2198 }); 2199 el[domMethod]("pointerdown", swiper.onTouchStart, { 2200 passive: false 2201 }); 2202 document[domMethod]("touchmove", swiper.onTouchMove, { 2203 passive: false, 2204 capture 2205 }); 2206 document[domMethod]("pointermove", swiper.onTouchMove, { 2207 passive: false, 2208 capture 2209 }); 2210 document[domMethod]("touchend", swiper.onTouchEnd, { 2211 passive: true 2212 }); 2213 document[domMethod]("pointerup", swiper.onTouchEnd, { 2214 passive: true 2215 }); 2216 document[domMethod]("pointercancel", swiper.onTouchEnd, { 2217 passive: true 2218 }); 2219 document[domMethod]("touchcancel", swiper.onTouchEnd, { 2220 passive: true 2221 }); 2222 document[domMethod]("pointerout", swiper.onTouchEnd, { 2223 passive: true 2224 }); 2225 document[domMethod]("pointerleave", swiper.onTouchEnd, { 2226 passive: true 2227 }); 2228 document[domMethod]("contextmenu", swiper.onTouchEnd, { 2229 passive: true 2230 }); 2231 if (params.preventClicks || params.preventClicksPropagation) el[domMethod]("click", swiper.onClick, true); 2232 if (params.cssMode) wrapperEl[domMethod]("scroll", swiper.onScroll); 2233 if (params.updateOnWindowResize) swiper[swiperMethod](device.ios || device.android ? "resize orientationchange observerUpdate" : "resize observerUpdate", onResize, true); else swiper[swiperMethod]("observerUpdate", onResize, true); 2234 el[domMethod]("load", swiper.onLoad, { 2235 capture: true 2236 }); 2237 }; 2238 function attachEvents() { 2239 const swiper = this; 2240 const {params} = swiper; 2241 swiper.onTouchStart = onTouchStart.bind(swiper); 2242 swiper.onTouchMove = onTouchMove.bind(swiper); 2243 swiper.onTouchEnd = onTouchEnd.bind(swiper); 2244 swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper); 2245 if (params.cssMode) swiper.onScroll = onScroll.bind(swiper); 2246 swiper.onClick = onClick.bind(swiper); 2247 swiper.onLoad = onLoad.bind(swiper); 2248 events(swiper, "on"); 2249 } 2250 function detachEvents() { 2251 const swiper = this; 2252 events(swiper, "off"); 2253 } 2254 var events$1 = { 2255 attachEvents, 2256 detachEvents 2257 }; 2258 const isGridEnabled = (swiper, params) => swiper.grid && params.grid && params.grid.rows > 1; 2259 function setBreakpoint() { 2260 const swiper = this; 2261 const {realIndex, initialized, params, el} = swiper; 2262 const breakpoints = params.breakpoints; 2263 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; 2264 const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el); 2265 if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; 2266 const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : void 0; 2267 const breakpointParams = breakpointOnlyParams || swiper.originalParams; 2268 const wasMultiRow = isGridEnabled(swiper, params); 2269 const isMultiRow = isGridEnabled(swiper, breakpointParams); 2270 const wasEnabled = params.enabled; 2271 if (wasMultiRow && !isMultiRow) { 2272 el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`); 2273 swiper.emitContainerClasses(); 2274 } else if (!wasMultiRow && isMultiRow) { 2275 el.classList.add(`${params.containerModifierClass}grid`); 2276 if (breakpointParams.grid.fill && breakpointParams.grid.fill === "column" || !breakpointParams.grid.fill && params.grid.fill === "column") el.classList.add(`${params.containerModifierClass}grid-column`); 2277 swiper.emitContainerClasses(); 2278 } 2279 [ "navigation", "pagination", "scrollbar" ].forEach((prop => { 2280 if (typeof breakpointParams[prop] === "undefined") return; 2281 const wasModuleEnabled = params[prop] && params[prop].enabled; 2282 const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled; 2283 if (wasModuleEnabled && !isModuleEnabled) swiper[prop].disable(); 2284 if (!wasModuleEnabled && isModuleEnabled) swiper[prop].enable(); 2285 })); 2286 const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 2287 const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 2288 const wasLoop = params.loop; 2289 if (directionChanged && initialized) swiper.changeDirection(); 2290 utils_extend(swiper.params, breakpointParams); 2291 const isEnabled = swiper.params.enabled; 2292 const hasLoop = swiper.params.loop; 2293 Object.assign(swiper, { 2294 allowTouchMove: swiper.params.allowTouchMove, 2295 allowSlideNext: swiper.params.allowSlideNext, 2296 allowSlidePrev: swiper.params.allowSlidePrev 2297 }); 2298 if (wasEnabled && !isEnabled) swiper.disable(); else if (!wasEnabled && isEnabled) swiper.enable(); 2299 swiper.currentBreakpoint = breakpoint; 2300 swiper.emit("_beforeBreakpoint", breakpointParams); 2301 if (initialized) if (needsReLoop) { 2302 swiper.loopDestroy(); 2303 swiper.loopCreate(realIndex); 2304 swiper.updateSlides(); 2305 } else if (!wasLoop && hasLoop) { 2306 swiper.loopCreate(realIndex); 2307 swiper.updateSlides(); 2308 } else if (wasLoop && !hasLoop) swiper.loopDestroy(); 2309 swiper.emit("breakpoint", breakpointParams); 2310 }
2311 function getBreakpoint(breakpoints, base, containerEl) { 2312 if (base === void 0) base = "window"; 2313 if (!breakpoints || base === "container" && !containerEl) return; 2314 let breakpoint = false; 2315 const window = ssr_window_esm_getWindow(); 2316 const currentHeight = base === "window" ? window.innerHeight : containerEl.clientHeight; 2317 const points = Object.keys(breakpoints).map((point => { 2318 if (typeof point === "string" && point.indexOf("@") === 0) { 2319 const minRatio = parseFloat(point.substr(1)); 2320 const value = currentHeight * minRatio; 2321 return { 2322 value, 2323 point 2324 }; 2325 } 2326 return { 2327 value: point, 2328 point 2329 }; 2330 })); 2331 points.sort(((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10))); 2332 for (let i = 0; i < points.length; i += 1) { 2333 const {point, value} = points[i]; 2334 if (base === "window") { 2335 if (window.matchMedia(`(min-width: ${value}px)`).matches) breakpoint = point; 2336 } else if (value <= containerEl.clientWidth) breakpoint = point; 2337 } 2338 return breakpoint || "max"; 2339 } 2340 var breakpoints = { 2341 setBreakpoint, 2342 getBreakpoint 2343 }; 2344 function prepareClasses(entries, prefix) { 2345 const resultClasses = []; 2346 entries.forEach((item => { 2347 if (typeof item === "object") Object.keys(item).forEach((classNames => { 2348 if (item[classNames]) resultClasses.push(prefix + classNames); 2349 })); else if (typeof item === "string") resultClasses.push(prefix + item); 2350 })); 2351 return resultClasses; 2352 } 2353 function addClasses() { 2354 const swiper = this; 2355 const {classNames, params, rtl, el, device} = swiper; 2356 const suffixes = prepareClasses([ "initialized", params.direction, { 2357 "free-mode": swiper.params.freeMode && params.freeMode.enabled 2358 }, { 2359 autoheight: params.autoHeight 2360 }, { 2361 rtl 2362 }, { 2363 grid: params.grid && params.grid.rows > 1 2364 }, { 2365 "grid-column": params.grid && params.grid.rows > 1 && params.grid.fill === "column" 2366 }, { 2367 android: device.android 2368 }, { 2369 ios: device.ios 2370 }, { 2371 "css-mode": params.cssMode 2372 }, { 2373 centered: params.cssMode && params.centeredSlides 2374 }, { 2375 "watch-progress": params.watchSlidesProgress 2376 } ], params.containerModifierClass); 2377 classNames.push(...suffixes); 2378 el.classList.add(...classNames); 2379 swiper.emitContainerClasses(); 2380 } 2381 function removeClasses() { 2382 const swiper = this; 2383 const {el, classNames} = swiper; 2384 el.classList.remove(...classNames); 2385 swiper.emitContainerClasses(); 2386 } 2387 var classes = { 2388 addClasses, 2389 removeClasses 2390 }; 2391 function checkOverflow() { 2392 const swiper = this; 2393 const {isLocked: wasLocked, params} = swiper; 2394 const {slidesOffsetBefore} = params; 2395 if (slidesOffsetBefore) { 2396 const lastSlideIndex = swiper.slides.length - 1; 2397 const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2; 2398 swiper.isLocked = swiper.size > lastSlideRightEdge; 2399 } else swiper.isLocked = swiper.snapGrid.length === 1; 2400 if (params.allowSlideNext === true) swiper.allowSlideNext = !swiper.isLocked; 2401 if (params.allowSlidePrev === true) swiper.allowSlidePrev = !swiper.isLocked; 2402 if (wasLocked && wasLocked !== swiper.isLocked) swiper.isEnd = false; 2403 if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? "lock" : "unlock"); 2404 } 2405 var checkOverflow$1 = { 2406 checkOverflow 2407 }; 2408 var defaults = { 2409 init: true, 2410 direction: "horizontal", 2411 oneWayMovement: false, 2412 touchEventsTarget: "wrapper", 2413 initialSlide: 0, 2414 speed: 300, 2415 cssMode: false, 2416 updateOnWindowResize: true, 2417 resizeObserver: true, 2418 nested: false, 2419 createElements: false, 2420 eventsPrefix: "swiper", 2421 enabled: true, 2422 focusableElements: "input, select, option, textarea, button, video, label", 2423 width: null, 2424 height: null, 2425 preventInteractionOnTransition: false, 2426 userAgent: null, 2427 url: null, 2428 edgeSwipeDetection: false, 2429 edgeSwipeThreshold: 20, 2430 autoHeight: false, 2431 setWrapperSize: false, 2432 virtualTranslate: false, 2433 effect: "slide", 2434 breakpoints: void 0, 2435 breakpointsBase: "window", 2436 spaceBetween: 0, 2437 slidesPerView: 1, 2438 slidesPerGroup: 1, 2439 slidesPerGroupSkip: 0, 2440 slidesPerGroupAuto: false, 2441 centeredSlides: false,
2442 centeredSlidesBounds: false, 2443 slidesOffsetBefore: 0, 2444 slidesOffsetAfter: 0, 2445 normalizeSlideIndex: true, 2446 centerInsufficientSlides: false, 2447 watchOverflow: true, 2448 roundLengths: false, 2449 touchRatio: 1, 2450 touchAngle: 45, 2451 simulateTouch: true, 2452 shortSwipes: true, 2453 longSwipes: true, 2454 longSwipesRatio: .5, 2455 longSwipesMs: 300, 2456 followFinger: true, 2457 allowTouchMove: true, 2458 threshold: 5, 2459 touchMoveStopPropagation: false, 2460 touchStartPreventDefault: true, 2461 touchStartForcePreventDefault: false, 2462 touchReleaseOnEdges: false, 2463 uniqueNavElements: true, 2464 resistance: true, 2465 resistanceRatio: .85, 2466 watchSlidesProgress: false, 2467 grabCursor: false, 2468 preventClicks: true, 2469 preventClicksPropagation: true, 2470 slideToClickedSlide: false, 2471 loop: false, 2472 loopAddBlankSlides: true, 2473 loopAdditionalSlides: 0, 2474 loopPreventsSliding: true, 2475 rewind: false, 2476 allowSlidePrev: true, 2477 allowSlideNext: true, 2478 swipeHandler: null, 2479 noSwiping: true, 2480 noSwipingClass: "swiper-no-swiping", 2481 noSwipingSelector: null, 2482 passiveListeners: true, 2483 maxBackfaceHiddenSlides: 10, 2484 containerModifierClass: "swiper-", 2485 slideClass: "swiper-slide", 2486 slideBlankClass: "swiper-slide-blank", 2487 slideActiveClass: "swiper-slide-active", 2488 slideVisibleClass: "swiper-slide-visible", 2489 slideFullyVisibleClass: "swiper-slide-fully-visible", 2490 slideNextClass: "swiper-slide-next", 2491 slidePrevClass: "swiper-slide-prev", 2492 wrapperClass: "swiper-wrapper", 2493 lazyPreloaderClass: "swiper-lazy-preloader", 2494 lazyPreloadPrevNext: 0, 2495 runCallbacksOnInit: true, 2496 _emitClasses: false 2497 }; 2498 function moduleExtendParams(params, allModulesParams) { 2499 return function extendParams(obj) { 2500 if (obj === void 0) obj = {}; 2501 const moduleParamName = Object.keys(obj)[0]; 2502 const moduleParams = obj[moduleParamName]; 2503 if (typeof moduleParams !== "object" || moduleParams === null) { 2504 utils_extend(allModulesParams, obj); 2505 return; 2506 } 2507 if (params[moduleParamName] === true) params[moduleParamName] = { 2508 enabled: true 2509 }; 2510 if (moduleParamName === "navigation" && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) params[moduleParamName].auto = true; 2511 if ([ "pagination", "scrollbar" ].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) params[moduleParamName].auto = true; 2512 if (!(moduleParamName in params && "enabled" in moduleParams)) { 2513 utils_extend(allModulesParams, obj); 2514 return; 2515 } 2516 if (typeof params[moduleParamName] === "object" && !("enabled" in params[moduleParamName])) params[moduleParamName].enabled = true; 2517 if (!params[moduleParamName]) params[moduleParamName] = { 2518 enabled: false 2519 }; 2520 utils_extend(allModulesParams, obj); 2521 }; 2522 } 2523 const prototypes = { 2524 eventsEmitter, 2525 update, 2526 translate, 2527 transition, 2528 slide, 2529 loop, 2530 grabCursor, 2531 events: events$1, 2532 breakpoints, 2533 checkOverflow: checkOverflow$1, 2534 classes 2535 }; 2536 const extendedDefaults = {}; 2537 class Swiper { 2538 constructor() { 2539 let el; 2540 let params; 2541 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; 2542 if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === "Object") params = args[0]; else [el, params] = args; 2543 if (!params) params = {}; 2544 params = utils_extend({}, params); 2545 if (el && !params.el) params.el = el; 2546 const document = ssr_window_esm_getDocument(); 2547 if (params.el && typeof params.el === "string" && document.querySelectorAll(params.el).length > 1) { 2548 const swipers = []; 2549 document.querySelectorAll(params.el).forEach((containerEl => { 2550 const newParams = utils_extend({}, params, { 2551 el: containerEl 2552 }); 2553 swipers.push(new Swiper(newParams)); 2554 })); 2555 return swipers; 2556 } 2557 const swiper = this; 2558 swiper.__swiper__ = true;
2559 swiper.support = getSupport(); 2560 swiper.device = getDevice({ 2561 userAgent: params.userAgent 2562 }); 2563 swiper.browser = getBrowser(); 2564 swiper.eventsListeners = {}; 2565 swiper.eventsAnyListeners = []; 2566 swiper.modules = [ ...swiper.__modules__ ]; 2567 if (params.modules && Array.isArray(params.modules)) swiper.modules.push(...params.modules); 2568 const allModulesParams = {}; 2569 swiper.modules.forEach((mod => { 2570 mod({ 2571 params, 2572 swiper, 2573 extendParams: moduleExtendParams(params, allModulesParams), 2574 on: swiper.on.bind(swiper), 2575 once: swiper.once.bind(swiper), 2576 off: swiper.off.bind(swiper), 2577 emit: swiper.emit.bind(swiper) 2578 }); 2579 })); 2580 const swiperParams = utils_extend({}, defaults, allModulesParams); 2581 swiper.params = utils_extend({}, swiperParams, extendedDefaults, params); 2582 swiper.originalParams = utils_extend({}, swiper.params); 2583 swiper.passedParams = utils_extend({}, params); 2584 if (swiper.params && swiper.params.on) Object.keys(swiper.params.on).forEac
2584h((eventName => { 2585 swiper.on(eventName, swiper.params.on[eventName]); 2586 })); 2587 if (swiper.params && swiper.params.onAny) swiper.onAny(swiper.params.onAny); 2588 Object.assign(swiper, { 2589 enabled: swiper.params.enabled, 2590 el, 2591 classNames: [], 2592 slides: [], 2593 slidesGrid: [], 2594 snapGrid: [], 2595 slidesSizesGrid: [], 2596 isHorizontal() { 2597 return swiper.params.direction === "horizontal"; 2598 }, 2599 isVertical() { 2600 return swiper.params.direction === "vertical"; 2601 }, 2602 activeIndex: 0, 2603 realIndex: 0, 2604 isBeginning: true, 2605 isEnd: false, 2606 translate: 0, 2607 previousTranslate: 0, 2608 progress: 0, 2609 velocity: 0, 2610 animating: false, 2611 cssOverflowAdjustment() { 2612 return Math.trunc(this.translate / 2 ** 23) * 2 ** 23; 2613 }, 2614 allowSlideNext: swiper.params.allowSlideNext, 2615 allowSlidePrev: swiper.params.allowSlidePrev, 2616 touchEventsData: { 2617 isTouched: void 0, 2618 isMoved: void 0, 2619 allowTouchCallbacks: void 0, 2620 touchStartTime: void 0, 2621 isScrolling: void 0, 2622 currentTranslate: void 0, 2623 startTranslate: void 0, 2624 allowThresholdMove: void 0, 2625 focusableElements: swiper.params.focusableElements, 2626 lastClickTime: 0, 2627 clickTimeout: void 0, 2628 velocities: [], 2629 allowMomentumBounce: void 0, 2630 startMoving: void 0, 2631 pointerId: null, 2632 touchId: null 2633 }, 2634 allowClick: true, 2635 allowTouchMove: swiper.params.allowTouchMove, 2636 touches: { 2637 startX: 0, 2638 startY: 0, 2639 currentX: 0, 2640 currentY: 0, 2641 diff: 0 2642 }, 2643 imagesToLoad: [], 2644 imagesLoaded: 0 2645 }); 2646 swiper.emit("_swiper"); 2647 if (swiper.params.init) swiper.init(); 2648 return swiper; 2649 } 2650 getDirectionLabel(property) { 2651 if (this.isHorizontal()) return property; 2652 return { 2653 width: "height", 2654 "margin-top": "margin-left", 2655 "margin-bottom ": "margin-right", 2656 "margin-left": "margin-top", 2657 "margin-right": "margin-bottom", 2658 "padding-left": "padding-top", 2659 "padding-right": "padding-bottom", 2660 marginRight: "marginBottom" 2661 }[property]; 2662 } 2663 getSlideIndex(slideEl) { 2664 const {slidesEl, params} = this; 2665 const slides = utils_elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 2666 const firstSlideIndex = utils_elementIndex(slides[0]); 2667 return utils_elementIndex(slideEl) - firstSlideIndex; 2668 } 2669 getSlideIndexByData(index) { 2670 return this.getSlideIndex(this.slides.filter((slideEl => slideEl.getAttribute("data-swiper-slide-index") * 1 === index))[0]); 2671 } 2672 recalcSlides() { 2673 const swiper = this; 2674 const {slidesEl, params} = swiper; 2675 swiper.slides = utils_elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 2676 } 2677 enable() { 2678 const swiper = this; 2679 if (swiper.enabled) return; 2680 swiper.enabled = true; 2681 if (swiper.params.grabCursor) swiper.setGrabCursor(); 2682 swiper.emit("enable"); 2683 } 2684 disable() { 2685 const swiper = this; 2686 if (!swiper.enabled) return; 2687 swiper.enabled = false; 2688 if (swiper.params.grabCursor) swiper.unsetGrabCursor(
2688); 2689 swiper.emit("disable"); 2690 } 2691 setProgress(progress, speed) { 2692 const swiper = this; 2693 progress = Math.min(Math.max(progress, 0), 1); 2694 const min = swiper.minTranslate(); 2695 const max = swiper.maxTranslate(); 2696 const current = (max - min) * progress + min; 2697 swiper.translateTo(current, typeof speed === "undefined" ? 0 : speed); 2698 swiper.updateActiveIndex(); 2699 swiper.updateSlidesClasses(); 2700 } 2701 emitContainerClasses() { 2702 const swiper = this; 2703 if (!swiper.params._emitClasses || !swiper.el) return; 2704 const cls = swiper.el.className.split(" ").filter((className => className.indexOf("swiper") === 0 || className.indexOf(swiper.params.containerModifierClass) === 0)); 2705 swiper.emit("_containerClasses", cls.join(" ")); 2706 } 2707 getSlideClasses(slideEl) { 2708 const swiper = this; 2709 if (swiper.destroyed) return ""; 2710 return slideEl.className.split(" ").filter((className => className.indexOf("swiper-slide") === 0 || className.indexOf(swiper.params.slideClass) === 0)).join(" "); 2711 } 2712 emitSlidesClasses() { 2713 const swiper = this; 2714 if (!swiper.params._emitClasses || !swiper.el) return; 2715 const updates = []; 2716 swiper.slides.forEach((slideEl => { 2717 const classNames = swiper.getSlideClasses(slideEl); 2718 updates.push({ 2719 slideEl, 2720 classNames 2721 }); 2722 swiper.emit("_slideClass", slideEl, classNames); 2723 })); 2724 swiper.emit("_slideClasses", updates); 2725 } 2726 slidesPerViewDynamic(view, exact) { 2727 if (view === void 0) view = "current"; 2728 if (exact === void 0) exact = false; 2729 const swiper = this; 2730 const {params, slides, slidesGrid, slidesSizesGrid, size: swiperSize, activeIndex} = swiper; 2731 let spv = 1; 2732 if (typeof params.slidesPerView === "number") return params.slidesPerView; 2733 if (params.centeredSlides) { 2734 let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0; 2735 let breakLoop; 2736 for (let i = activeIndex + 1; i < slides.length; i += 1) if (slides[i] && !breakLoop) { 2737 slideSize += slides[i].swiperSlideSize; 2738 spv += 1; 2739 if (slideSize > swiperSize) breakLoop = true; 2740 } 2741 for (let i = activeIndex - 1; i >= 0; i -= 1) if (slides[i] && !breakLoop) { 2742 slideSize += slides[i].swiperSlideSize; 2743 spv += 1; 2744 if (slideSize > swiperSize) breakLoop = true; 2745 } 2746 } else if (view === "current") for (let i = activeIndex + 1; i < slides.length; i += 1) { 2747 const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize; 2748 if (slideInView) spv += 1; 2749 } else for (let i = activeIndex - 1; i >= 0; i -= 1) { 2750 const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize; 2751 if (slideInView) spv += 1; 2752 } 2753 return spv; 2754 } 2755 update() { 2756 const swiper = this; 2757 if (!swiper || swiper.destroyed) return; 2758 const {snapGrid, params} = swiper; 2759 if (params.breakpoints) swiper.setBreakpoint(); 2760 [ ...swiper.el.querySelectorAll('[loading="lazy"]') ].forEach((imageEl => { 2761 if (imageEl.complete) processLazyPreloader(swiper, imageEl); 2762 })); 2763 swiper.updateSize(); 2764 swiper.updateSlides(); 2765 swiper.updateProgress(); 2766 swiper.updateSlidesClasses(); 2767 function setTranslate() { 2768 const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 2769 const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 2770 swiper.setTranslate(newTranslate); 2771 swiper.updateActiveIndex(); 2772 swiper.updateSlidesClasses(); 2773 } 2774 let translated; 2775 if (params.freeMode && params.freeMode.enabled && !params.cssMode) { 2776 setTranslate(); 2777 if (params.autoHeight) swiper.updateAutoHeight(); 2778 } else { 2779 if ((params.slidesPerView === "auto" || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) { 2780 const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides; 2781 translated = swiper.slideTo(slides.length - 1, 0, false, true); 2782 } else translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 2783 if (!translated) setTranslate(); 2784 } 2785 if (params.watchOverflow && snapGrid !== swiper.snapGrid) swiper.checkOverflow(); 2786 swiper.emit("update"); 2787 } 2788 changeDirection(newDirection, needUpdate) { 2789 if (needUpdate === void 0) needUpdate = true; 2790 const swiper = this; 2791 const currentDirection = swiper.params.direction; 2792 if (!newDirection) newDirection = currentDirection === "horizontal" ? "vertical" : "horizontal"; 2793 if (newDirection === currentDirection || newDirection !== "horizontal" && newDirection !== "vertical") return swiper; 2794 swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`); 2795 swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`); 2796 swiper.emitContainerClasses(); 2797 swiper.params.direction = newDirection;
2798 swiper.slides.forEach((slideEl => { 2799 if (newDirection === "vertical") slideEl.style.width = ""; else slideEl.style.height = ""; 2800 })); 2801 swiper.emit("changeDirection"); 2802 if (needUpdate) swiper.update(); 2803 return swiper; 2804 } 2805 changeLanguageDirection(direction) { 2806 const swiper = this; 2807 if (swiper.rtl && direction === "rtl" || !swiper.rtl && direction === "ltr") return; 2808 swiper.rtl = direction === "rtl"; 2809 swiper.rtlTranslate = swiper.params.direction === "horizontal" && swiper.rtl; 2810 if (swiper.rtl) { 2811 swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`); 2812 swiper.el.dir = "rtl"; 2813 } else { 2814 swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`); 2815 swiper.el.dir = "ltr"; 2816 } 2817 swiper.update(); 2818 } 2819 mount(element) { 2820 const swiper = this; 2821 if (swiper.mounted) return true; 2822 let el = element || swiper.params.el; 2823 if (typeof el === "string") el = document.querySelector(el); 2824 if (!el) return false; 2825 el.swiper = swiper; 2826 if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === "SWIPER-CONTAINER") swiper.isElement = true; 2827 const getWrapperSelector = () => `.${(swiper.params.wrapperClass || "").trim().split(" ").join(".")}`; 2828 const getWrapper = () => { 2829 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 2830 const res = el.shadowRoot.querySelector(getWrapperSelector()); 2831 return res; 2832 } 2833 return utils_elementChildren(el, getWrapperSelector())[0]; 2834 }; 2835 let wrapperEl = getWrapper(); 2836 if (!wrapperEl && swiper.params.createElements) { 2837 wrapperEl = utils_createElement("div", swiper.params.wrapperClass); 2838 el.append(wrapperEl); 2839 utils_elementChildren(el, `.${swiper.params.slideClass}`).forEach((slideEl => { 2840 wrapperEl.append(slideEl); 2841 })); 2842 } 2843 Object.assign(swiper, { 2844 el, 2845 wrapperEl, 2846 slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl, 2847 hostEl: swiper.isElement ? el.parentNode.host : el, 2848 mounted: true, 2849 rtl: el.dir.toLowerCase() === "rtl" || elementStyle(el, "direction") === "rtl", 2850 rtlTranslate: swiper.params.direction === "horizontal" && (el.dir.toLowerCase() === "rtl" || elementStyle(el, "direction") === "rtl"), 2851 wrongRTL: elementStyle(wrapperEl, "display") === "-webkit-box" 2852 }); 2853 return true; 2854 } 2855 init(el) { 2856 const swiper = this; 2857 if (swiper.initialized) return swiper; 2858 const mounted = swiper.mount(el); 2859 if (mounted === false) return swiper; 2860 swiper.emit("beforeInit"); 2861 if (swiper.params.breakpoints) swiper.setBreakpoint(); 2862 swiper.addClasses(); 2863 swiper.updateSize(); 2864 swiper.updateSlides(); 2865 if (swiper.params.watchOverflow) swiper.checkOverflow(); 2866 if (swiper.params.grabCursor && swiper.enabled) swiper.setGrabCursor(); 2867 if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true); else swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); 2868 if (swiper.params.loop) swiper.loopCreate(); 2869 swiper.attachEvents(); 2870 const lazyElements = [ ...swiper.el.querySelectorAll('[loading="lazy"]') ]; 2871 if (swiper.isElement) lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]'));
2872 lazyElements.forEach((imageEl => { 2873 if (imageEl.complete) processLazyPreloader(swiper, imageEl); else imageEl.addEventListener("load", (e => { 2874 processLazyPreloader(swiper, e.target); 2875 })); 2876 })); 2877 preload(swiper); 2878 swiper.initialized = true; 2879 preload(swiper); 2880 swiper.emit("init"); 2881 swiper.emit("afterInit"); 2882 return swiper; 2883 } 2884 destroy(deleteInstance, cleanStyles) { 2885 if (deleteInstance === void 0) deleteInstance = true; 2886 if (cleanStyles === void 0) cleanStyles = true; 2887 const swiper = this; 2888 const {params, el, wrapperEl, slides} = swiper; 2889 if (typeof swiper.params === "undefined" || swiper.destroyed) return null; 2890 swiper.emit("beforeDestroy"); 2891 swiper.initialized = false; 2892 swiper.detachEvents(); 2893 if (params.loop) swiper.loopDestroy(); 2894 if (cleanStyles) { 2895 swiper.removeClasses(); 2896 el.removeAttribute("style"); 2897 wrapperEl.removeAttribute("style"); 2898 if (slides && slides.length) slides.forEach((slideEl => { 2899 slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 2900 slideEl.removeAttribute("style"); 2901 slideEl.removeAttribute("data-swiper-slide-index"); 2902 })); 2903 } 2904 swiper.emit("destroy"); 2905 Object.keys(swiper.eventsListeners).forEach((eventName => { 2906 swiper.off(eventName); 2907 })); 2908 if (deleteInstance !== false) { 2909 swiper.el.swiper = null; 2910 deleteProps(swiper); 2911 } 2912 swiper.destroyed = true; 2913 return null; 2914 } 2915 static extendDefaults(newDefaults) { 2916 utils_extend(extendedDefaults, newDefaults); 2917 } 2918 static get extendedDefaults() { 2919 return extendedDefaults; 2920 } 2921 static get defaults() { 2922 return defaults; 2923 } 2924 static installModule(mod) { 2925 if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = []; 2926 const modules = Swiper.prototype.__modules__; 2927 if (typeof mod === "function" && modules.indexOf(mod) < 0) modules.push(mod); 2928 } 2929 static use(module) { 2930 if (Array.isArray(module)) { 2931 module.forEach((m => Swiper.installModule(m))); 2932 return Swiper; 2933 } 2934 Swiper.installModule(module); 2935 return Swiper; 2936 } 2937 } 2938 Object.keys(prototypes).forEach((prototypeGroup => { 2939 Object.keys(prototypes[prototypeGroup]).forEach((protoMethod => { 2940 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 2941 })); 2942 })); 2943 Swiper.use([ Resize, Observer ]); 2944 function create_element_if_not_defined_createElementIfNotDefined(swiper, originalParams, params, checkProps) { 2945 if (swiper.params.createElements) Object.keys(checkProps).forEach((key => { 2946 if (!params[key] && params.auto === true) { 2947 let element = utils_elementChildren(swiper.el, `.${checkProps[key]}`)[0]; 2948 if (!element) { 2949 element = utils_createElement("div", checkProps[key]); 2950 element.className = checkProps[key]; 2951 swiper.el.append(element); 2952 } 2953 params[key] = element; 2954 originalParams[key] = element; 2955 } 2956 })); 2957 return params; 2958 } 2959 function Navigation(_ref) { 2960 let {swiper, extendParams, on, emit} = _ref; 2961 extendParams({ 2962 navigation: { 2963 nextEl: null, 2964 prevEl: null, 2965 hideOnClick: false, 2966 disabledClass: "swiper-button-disabled", 2967 hiddenClass: "swiper-button-hidden", 2968 lockClass: "swiper-button-lock", 2969 navigationDisabledClass: "swiper-navigation-disabled" 2970 } 2971 }); 2972 swiper.navigation = { 2973 nextEl: null, 2974 prevEl: null 2975 }; 2976 const makeElementsArray = el => (Array.isArray(el) ? el : [ el ]).filter((e => !!e)); 2977 function getEl(el) { 2978 let res; 2979 if (el && typeof el === "string" && swiper.isElement) { 2980 res = swiper.el.querySelector(el); 2981 if (res) return res; 2982 } 2983 if (el) { 2984 if (typeof el === "string") res = [ ...document.querySelectorAll(el) ]; 2985 if (swiper.params.uniqueNavElements && typeof el === "string" && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) res = swiper.el.querySelector(el); 2986 } 2987 if (el && !res) return el; 2988 return res; 2989 } 2990 function toggleEl(el, disabled) { 2991 const params = swiper.params.navigation; 2992 el = makeElementsArray(el); 2993 el.forEach((subEl => { 2994 if (subEl) { 2995 subEl.classList[disabled ? "add" : "remove"](...params.disabledClass.split(" ")); 2996 if (subEl.tagName === "BUTTON") subEl.disabled = disabled; 2997 if (swiper.params.watchOverflow && swiper.enabled) subEl.classList[swiper.isLocked ? "add" : "remove"](params.lockClass); 2998 } 2999 })); 3000 }
3001 function update() { 3002 const {nextEl, prevEl} = swiper.navigation; 3003 if (swiper.params.loop) { 3004 toggleEl(prevEl, false); 3005 toggleEl(nextEl, false); 3006 return; 3007 } 3008 toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind); 3009 toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind); 3010 } 3011 function onPrevClick(e) { 3012 e.preventDefault(); 3013 if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return; 3014 swiper.slidePrev(); 3015 emit("navigationPrev"); 3016 } 3017 function onNextClick(e) { 3018 e.preventDefault(); 3019 if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return; 3020 swiper.slideNext(); 3021 emit("navigationNext"); 3022 } 3023 function init() { 3024 const params = swiper.params.navigation; 3025 swiper.params.navigation = create_element_if_not_defined_createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, { 3026 nextEl: "swiper-button-next", 3027 prevEl: "swiper-button-prev" 3028 }); 3029 if (!(params.nextEl || params.prevEl)) return; 3030 let nextEl = getEl(params.nextEl); 3031 let prevEl = getEl(params.prevEl); 3032 Object.assign(swiper.navigation, { 3033 nextEl, 3034 prevEl 3035 }); 3036 nextEl = makeElementsArray(nextEl); 3037 prevEl = makeElementsArray(prevEl); 3038 const initButton = (el, dir) => { 3039 if (el) el.addEventListener("click", dir === "next" ? onNextClick : onPrevClick); 3040 if (!swiper.enabled && el) el.classList.add(...params.lockClass.split(" ")); 3041 }; 3042 nextEl.forEach((el => initButton(el, "next"))); 3043 prevEl.forEach((el => initButton(el, "prev"))); 3044 } 3045 function destroy() { 3046 let {nextEl, prevEl} = swiper.navigation; 3047 nextEl = makeElementsArray(nextEl); 3048 prevEl = makeElementsArray(prevEl); 3049 const destroyButton = (el, dir) => { 3050 el.removeEventListener("click", dir === "next" ? onNextClick : onPrevClick); 3051 el.classList.remove(...swiper.params.navigation.disabledClass.split(" ")); 3052 }; 3053 nextEl.forEach((el => destroyButton(el, "next"))); 3054 prevEl.forEach((el => destroyButton(el, "prev"))); 3055 } 3056 on("init", (() => { 3057 if (swiper.params.navigation.enabled === false) disable(); else { 3058 init(); 3059 update(); 3060 } 3061 })); 3062 on("toEdge fromEdge lock unlock", (() => { 3063 update(); 3064 })); 3065 on("destroy", (() => { 3066 destroy(); 3067 })); 3068 on("enable disable", (() => { 3069 let {nextEl, prevEl} = swiper.navigation; 3070 nextEl = makeElementsArray(nextEl); 3071 prevEl = makeElementsArray(prevEl); 3072 if (swiper.enabled) { 3073 update(); 3074 return; 3075 } 3076 [ ...nextEl, ...prevEl ].filter((el => !!el)).forEach((el => el.classList.add(swiper.params.navigation.lockClass))); 3077 })); 3078 on("click", ((_s, e) => { 3079 let {nextEl, prevEl} = swiper.navigation; 3080 nextEl = makeElementsArray(nextEl); 3081 prevEl = makeElementsArray(prevEl); 3082 const targetEl = e.target; 3083 if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) { 3084 if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return; 3085 let isHidden; 3086 if (nextEl.length) isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass); else if (prevEl.length) isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass); 3087 if (isHidden === true) emit("navigationShow");
3087 else emit("navigationHide"); 3088 [ ...nextEl, ...prevEl ].filter((el => !!el)).forEach((el => el.classList.toggle(swiper.params.navigation.hiddenClass))); 3089 } 3090 })); 3091 const enable = () => { 3092 swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(" ")); 3093 init(); 3094 update(); 3095 }; 3096 const disable = () => { 3097 swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(" ")); 3098 destroy(); 3099 }; 3100 Object.assign(swiper.navigation, { 3101 enable, 3102 disable, 3103 update, 3104 init, 3105 destroy 3106 }); 3107 } 3108 function classes_to_selector_classesToSelector(classes) { 3109 if (classes === void 0) classes = ""; 3110 return `.${classes.trim().replace(/([\.:!+\/])/g, "\\$1").replace(/ /g, ".")}`; 3111 } 3112 function Scrollbar(_ref) { 3113 let {swiper, extendParams, on, emit} = _ref; 3114 const document = ssr_window_esm_getDocument(); 3115 let isTouched = false; 3116 let timeout = null; 3117 let dragTimeout = null; 3118 let dragStartPos; 3119 let dragSize; 3120 let trackSize; 3121 let divider; 3122 extendParams({ 3123 scrollbar: { 3124 el: null, 3125 dragSize: "auto", 3126 hide: false, 3127 draggable: false, 3128 snapOnRelease: true, 3129 lockClass: "swiper-scrollbar-lock", 3130 dragClass: "swiper-scrollbar-drag", 3131 scrollbarDisabledClass: "swiper-scrollbar-disabled", 3132 horizontalClass: `swiper-scrollbar-horizontal`, 3133 verticalClass: `swiper-scrollbar-vertical` 3134 } 3135 }); 3136 swiper.scrollbar = { 3137 el: null, 3138 dragEl: null 3139 }; 3140 function setTranslate() { 3141 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 3142 const {scrollbar, rtlTranslate: rtl} = swiper; 3143 const {dragEl, el} = scrollbar; 3144 const params = swiper.params.scrollbar; 3145 const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress; 3146 let newSize = dragSize; 3147 let newPos = (trackSize - dragSize) * progress; 3148 if (rtl) { 3149 newPos = -newPos; 3150 if (newPos > 0) { 3151 newSize = dragSize - newPos; 3152 newPos = 0; 3153 } else if (-newPos + dragSize > trackSize) newSize = trackSize + newPos; 3154 } else if (newPos < 0) { 3155 newSize = dragSize + newPos; 3156 newPos = 0; 3157 } else if (newPos + dragSize > trackSize) newSize = trackSize - newPos; 3158 if (swiper.isHorizontal()) { 3159 dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`; 3160 dragEl.style.width = `${newSize}px`; 3161 } else { 3162 dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`; 3163 dragEl.style.height = `${newSize}px`; 3164 } 3165 if (params.hide) { 3166 clearTimeout(timeout); 3167 el.style.opacity = 1; 3168 timeout = setTimeout((() => { 3169 el.style.opacity = 0; 3170 el.style.transitionDuration = "400ms"; 3171 }), 1e3); 3172 } 3173 } 3174 function setTransition(duration) { 3175 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 3176 swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`; 3177 } 3178 function updateSize() { 3179 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 3180 const {scrollbar} = swiper; 3181 const {dragEl, el} = scrollbar; 3182 dragEl.style.width = ""; 3183 dragEl.style.height = ""; 3184 trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight; 3185 divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0)); 3186 if (swiper.params.scrollbar.dragSize === "auto") dragSize = trackSize * divider; else dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 3187 if (swiper.isHorizontal()) dragEl.style.width = `${dragSize}px`; else dragEl.style.height = `${dragSize}px`; 3188 if (divider >= 1) el.style.display = "none"; else el.style.display = ""; 3189 if (swiper.params.scrollbar.hide) el.style.opacity = 0; 3190 if (swiper.params.watchOverflow && swiper.enabled) scrollbar.el.classList[swiper.isLocked ? "add" : "remove"](swiper.params.scrollbar.lockClass); 3191 } 3192 function getPointerPosition(e) { 3193 return swiper.isHorizontal() ? e.clientX : e.clientY; 3194 } 3195 function setDragPosition(e) { 3196 const {scrollbar, rtlTranslate: rtl} = swiper; 3197 const {el} = scrollbar; 3198 let positionRatio; 3199 positionRatio = (getPointerPosition(e) - utils_elementOffset(el)[swiper.isHorizontal() ? "left" : "top"] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 3200 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 3201 if (rtl) positionRatio = 1 - positionRatio; 3202 const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; 3203 swiper.updateProgress(position); 3204 swiper.setTranslate(position); 3205 swiper.updateActiveIndex(); 3206 swiper.updateSlidesClasses(); 3207 } 3208 function onDragStart(e) { 3209 const params = swiper.params.scrollbar; 3210 const {scrollbar, wrapperEl} = swiper; 3211 const {el, dragEl} = scrollbar; 3212 isTouched = true; 3213 dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? "left" : "top"] : null; 3214 e.preventDefault(); 3215 e.stopPropagation(); 3216 wrapperEl.style.transitionDuration = "100ms"; 3217 dragEl.style.transitionDuration = "100ms"; 3218 setDragPosition(e); 3219 clearTimeout(dragTimeout); 3220 el.style.transitionDuration = "0ms"; 3221 if (params.hide) el.style.opacity = 1; 3222 if (swiper.params.cssMode) swiper.wrapperEl.style["scroll-snap-type"] = "none"; 3223 emit("scrollbarDragStart", e); 3224 } 3225 function onDragMove(e) { 3226 const {scrollbar, wrapperEl} = swiper; 3227 const {el, dragEl} = scrollbar; 3228 if (!isTouched) return; 3229 if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
3230 setDragPosition(e); 3231 wrapperEl.style.transitionDuration = "0ms"; 3232 el.style.transitionDuration = "0ms"; 3233 dragEl.style.transitionDuration = "0ms"; 3234 emit("scrollbarDragMove", e); 3235 } 3236 function onDragEnd(e) { 3237 const params = swiper.params.scrollbar; 3238 const {scrollbar, wrapperEl} = swiper; 3239 const {el} = scrollbar; 3240 if (!isTouched) return; 3241 isTouched = false; 3242 if (swiper.params.cssMode) { 3243 swiper.wrapperEl.style["scroll-snap-type"] = ""; 3244 wrapperEl.style.transitionDuration = ""; 3245 } 3246 if (params.hide) { 3247 clearTimeout(dragTimeout); 3248 dragTimeout = utils_nextTick((() => { 3249 el.style.opacity = 0; 3250 el.style.transitionDuration = "400ms"; 3251 }), 1e3); 3252 } 3253 emit("scrollbarDragEnd", e); 3254 if (params.snapOnRelease) swiper.slideToClosest(); 3255 } 3256 function events(method) { 3257 const {scrollbar, params} = swiper; 3258 const el = scrollbar.el; 3259 if (!el) return; 3260 const target = el; 3261 const activeListener = params.passiveListeners ? { 3262 passive: false, 3263 capture: false 3264 } : false; 3265 const passiveListener = params.passiveListeners ? { 3266 passive: true, 3267 capture: false 3268 } : false; 3269 if (!target) return; 3270 const eventMethod = method === "on" ? "addEventListener" : "removeEventListener"; 3271 target[eventMethod]("pointerdown", onDragStart, activeListener); 3272 document[eventMethod]("pointermove", onDragMove, activeListener); 3273 document[eventMethod]("pointerup", onDragEnd, passiveListener); 3274 } 3275 function enableDraggable() { 3276 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 3277 events("on"); 3278 } 3279 function disableDraggable() { 3280 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 3281 events("off"); 3282 } 3283 function init() { 3284 const {scrollbar, el: swiperEl} = swiper; 3285 swiper.params.scrollbar = create_element_if_not_defined_createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, { 3286 el: "swiper-scrollbar" 3287 }); 3288 const params = swiper.params.scrollbar; 3289 if (!params.el) return; 3290 let el; 3291 if (typeof params.el === "string" && swiper.isElement) el = swiper.el.querySelector(params.el); 3292 if (!el && typeof params.el === "string") { 3293 el = document.querySelectorAll(params.el); 3294 if (!el.length) return; 3295 } else if (!el) el = params.el; 3296 if (swiper.params.uniqueNavElements && typeof params.el === "string" && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) el = swiperEl.querySelector(params.el); 3297 if (el.length > 0) el = el[0]; 3298 el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 3299 let dragEl; 3300 if (el) { 3301 dragEl = el.querySelector(classes_to_selector_classesToSelector(swiper.params.scrollbar.dragClass)); 3302 if (!dragEl) { 3303 dragEl = utils_createElement("div", swiper.params.scrollbar.dragClass); 3304 el.append(dragEl); 3305 } 3306 } 3307 Object.assign(scrollbar, { 3308 el, 3309 dragEl 3310 }); 3311 if (params.draggable) enableDraggable(); 3312 if (el) el.classList[swiper.enabled ? "remove" : "add"](...classesToTokens(swiper.params.scrollbar.lockClass)); 3313 } 3314 function destroy() { 3315 const params = swiper.params.scrollbar; 3316 const el = swiper.scrollbar.el; 3317 if (el) el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass)); 3318 disableDraggable(); 3319 } 3320 on("init", (() => { 3321 if (swiper.params.scrollbar.enabled === false) disable(); else { 3322 init(); 3323 updateSize(); 3324 setTranslate(); 3325 } 3326 })); 3327 on("update resize observerUpdate lock unlock", (() => { 3328 updateSize(); 3329 })); 3330 on("setTranslate", (() => { 3331 setTranslate(); 3332 })); 3333 on("setTransition", ((_s, duration) => { 3334 setTransition(duration); 3335 })); 3336 on("enable disable", (() => { 3337 const {el} = swiper.scrollbar; 3338 if (el) el.classList[swiper.enabled ? "remove" : "add"](...classesToTokens(swiper.params.scrollbar.lockClass)); 3339 })); 3340 on("destroy", (() => { 3341 destroy(); 3342 })); 3343 const enable = () => { 3344 swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 3345 if (swiper.scrollbar.el) swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 3346 init(); 3347 updateSize(); 3348 setTranslate(); 3349 }; 3350 const disable = () => { 3351 swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 3352 if (swiper.scrollbar.el) swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass)); 3353 destroy(); 3354 }; 3355 Object.assign(swiper.scrollbar, { 3356 enable, 3357 disable, 3358 updateSize, 3359 setTranslate, 3360 init, 3361 destroy 3362 }); 3363 } 3364 function initSlidersRoom() { 3365 const sliders = document.querySelectorAll('.room-slider-swi
3365per'); 3366 3367 if (sliders.length > 0) { 3368 sliders.forEach((slider, index) => { 3369 // ÐеÑÑий ÑÐ»Ð°Ð¹Ð´ÐµÑ 3370 const swiper = new Swiper(slider, { 3371 modules: [Navigation, Scrollbar], 3372 observer: true, 3373 observeParents: true, 3374 slidesPerView: 1, 3375 spaceBetween: 20, 3376 speed: 800, 3377 scrollbar: { 3378 el: `.room_scrollbar-${index + 1}`, 3379 draggable: true, 3380 }, 3381 navigation: { 3382 prevEl: `.swiper-button-prev-${index + 1}`, 3383 nextEl: `.swiper-button-next-${index + 1}`, 3384 }, 3385 breakpoints: { 3386 320: { 3387 slidesPerView: 1, 3388 3389 }, 3390 350: { 3391 slidesPerView: 1, 3392 3393 }, 3394 3395 425: { 3396 slidesPerView: 1, 3397 3398 }, 3399 640: { 3400 slidesPerView: 1.3, 3401 spaceBetween: 16, 3402 autoHeight: true, 3403 }, 3404 768: { 3405 slidesPerView: 1.6, 3406 spaceBetween: 20, 3407 }, 3408 992: { 3409 slidesPerView: 2, 3410 spaceBetween: 20, 3411 }, 3412 1268: { 3413 slidesPerView: 2, 3414 spaceBetween: 45, 3415 }, 3416 1445: { 3417 slidesPerView: 3, 3418 spaceBetween: 30, 3419 } 3420 }, 3421 3422 on: { 3423 3424 }, 3425 }); 3426 }); 3427 } 3428 } 3429 3430 initSlidersRoom(); 3431 3432 function initSlidersAll() { 3433 const sliders = document.querySelectorAll('.swiper2'); 3434 3435 if (sliders.length > 0) { 3436 sliders.forEach((slider, index) => { 3437 // ÐеÑÑий ÑÐ»Ð°Ð¹Ð´ÐµÑ 3438 const swiper = new Swiper(slider, { 3439 modules: [Navigation, Scrollbar], 3440 observer: true, 3441 observeParents: true, 3442 slidesPerView: 1, 3443 spaceBetween: 20, 3444 speed: 800, 3445 scrollbar: { 3446 el: `.swiper-scrollbar-${index + 1}`, 3447 draggable: true, 3448 }, 3449 navigation: { 3450 prevEl: `.swiper-button-prev-${index + 1}`, 3451 nextEl: `.swiper-button-next-${index + 1}`, 3452 }, 3453 breakpoints: { 3454 320: { 3455 slidesPerView: 1, 3456 spaceBetween: -30, 3457 }, 3458 350: { 3459 slidesPerView: 1, 3460 spaceBetween: -50, 3461 }, 3462 390: { 3463 slidesPerView: 1, 3464 spaceBetween: -70, 3465 }, 3466 425: { 3467 slidesPerView: 1.35, 3468 spaceBetween: 20, 3469 }, 3470 640: { 3471 slidesPerView: 1, 3472 spaceBetween: 16, 3473 autoHeight: true, 3474 }, 3475 768: { 3476 slidesPerView: 1, 3477 spaceBetween: 20, 3478 }, 3479 992: { 3480 slidesPerView: 1, 3481 spaceBetween: 20, 3482 }, 3483 1268: { 3484 slidesPerView: 1, 3485 spaceBetween: 45, 3486 }, 3487 1445: { 3488 slidesPerView: 1, 3489 spaceBetween: 30, 3490 }, 3491 }, 3492 on: { 3493 init: function (swiper) { 3494 const fractionControllAll = document.querySelector(`.fraction-controll__all-${index + 1}`); 3495 if (fractionControllAll) fractionControllAll.innerHTML = swiper.slides.length < 10 ? `0${swiper.slides.length}` : swiper.slides.length; 3496 }, 3497 slideChange: function () { 3498 const fractionControlCurent = document.querySelector(`.fraction-controll__curent-${index + 1}`); 3499 if (fractionControlCurent) fractionControlCurent.innerHTML = swiper.activeIndex + 1 < 10 ? `0${swiper.activeIndex + 1}` : swiper.activeIndex + 1; 3500 const activeSlideIndex = swiper.activeIndex; 3501 const activeSlide = swiper.slides[activeSlideIndex]; 3502 const sliderPrevs = document.querySelector(`.photo-${index + 1}`); 3503 if (sliderPrevs) { 3504 const activeSlideContent = activeSlide.innerHTML; 3505 sliderPrevs.innerHTML = activeSlideContent; 3506 } 3507 }, 3508 }, 3509 }); 3510 }); 3511 } 3512 } 3513 3514 initSlidersAll(); 3515 3516 function initSlidersAlls() { 3517 const sliders = document.querySelectorAll('.swiper'); 3518 3519 if (sliders.length > 0) {
3520 sliders.forEach((slider, index) => { 3521 // ÐеÑÑий ÑÐ»Ð°Ð¹Ð´ÐµÑ 3522 const swiper = new Swiper(slider, { 3523 modules: [Navigation, Scrollbar], 3524 observer: true, 3525 observeParents: true, 3526 slidesPerView: 1, 3527 spaceBetween: 20, 3528 speed: 800, 3529 scrollbar: { 3530 el: `.swiper_scrollbar-${index + 1}`, 3531 draggable: true, 3532 }, 3533 navigation: { 3534 prevEl: `.swiper-button-prev-${index + 1}`, 3535 nextEl: `.swiper-button-next-${index + 1}`, 3536 }, 3537 breakpoints: { 3538 320: { 3539 slidesPerView: 1, 3540 spaceBetween: 10, 3541 }, 3542 350: { 3543 slidesPerView: 1, 3544 spaceBetween: 10, 3545 }, 3546 3547 425: { 3548 slidesPerView: 1, 3549 spaceBetween: 10, 3550 }, 3551 640: { 3552 slidesPerView: 2, 3553 spaceBetween: 16, 3554 autoHeight: true, 3555 }, 3556 768: { 3557 slidesPerView: 2, 3558 spaceBetween: 20, 3559 }, 3560 992: { 3561 slidesPerView: 2, 3562 spaceBetween: 20, 3563 }, 3564 1268: { 3565 slidesPerView: 2, 3566 spaceBetween: 45, 3567 }, 3568 1445: { 3569 slidesPerView: 3, 3570 spaceBetween: 30, 3571 } 3572 }, 3573 3574 on: { 3575 3576 }, 3577 }); 3578 }); 3579 } 3580 } 3581 3582 initSlidersAlls(); 3583 function initSlidersAllone() { 3584 const sliders = document.querySelectorAll('.swiper1'); 3585 3586 if (sliders.length > 0) { 3587 sliders.forEach((slider, index) => { 3588 // ÐеÑÑий ÑÐ»Ð°Ð¹Ð´ÐµÑ 3589 const swiper = new Swiper(slider, { 3590 modules: [Navigation, Scrollbar], 3591 observer: true, 3592 observeParents: true, 3593 slidesPerView: 3, 3594 spaceBetween: 20, 3595 speed: 800, 3596 scrollbar: { 3597 el: `.swiper__scrollbar-${index + 1}`, 3598 draggable: true, 3599 }, 3600 navigation: { 3601 prevEl: `.swiper-button-prev-${index + 1}`, 3602 nextEl: `.swiper-button-next-${index + 1}`, 3603 }, 3604 breakpoints: { 3605 320: { 3606 slidesPerView: 1, 3607 // spaceBetween: -40, 3608 }, 3609 350: { 3610 slidesPerView: 1, 3611 // spaceBetween: -50, 3612 }, 3613 3614 425: { 3615 slidesPerView: 1, 3616 // spaceBetween: -100, 3617 }, 3618 640: { 3619 slidesPerView: 2, 3620 spaceBetween: 16, 3621 autoHeight: true, 3622 }, 3623 768: { 3624 slidesPerView: 2, 3625 spaceBetween: 20, 3626 }, 3627 992: { 3628 slidesPerView: 3, 3629 spaceBetween: 20, 3630 }, 3631 1268: { 3632 slidesPerView: 3, 3633 spaceBetween: 45, 3634 }, 3635 1445: { 3636 slidesPerView: 4, 3637 spaceBetween: 30, 3638 } 3639 }, 3640 3641 on: { 3642 3643 }, 3644 }); 3645 }); 3646 } 3647 } 3648 3649 initSlidersAllone(); 3650 function initSlidersProg() { 3651 const sliders = document.querySelectorAll('.swiper-prog'); 3652 3653 if (sliders.length > 0) {
3654 sliders.forEach((slider, index) => { 3655 // ÐеÑÑий ÑÐ»Ð°Ð¹Ð´ÐµÑ 3656 const swiper = new Swiper(slider, { 3657 modules: [Navigation, Scrollbar], 3658 observer: true, 3659 observeParents: true, 3660 slidesPerView: 3, 3661 spaceBetween: 20, 3662 speed: 800, 3663 scrollbar: { 3664 el: `.prog-swiper__scrollbar-${index + 1}`, 3665 draggable: true, 3666 }, 3667 navigation: { 3668 prevEl: `.prog-swiper-button-prev-${index + 1}`, 3669 nextEl: `.prog-swiper-button-next-${index + 1}`, 3670 }, 3671 breakpoints: { 3672 320: { 3673 slidesPerView: 1, 3674 // spaceBetween: -40, 3675 }, 3676 350: { 3677 slidesPerView: 1, 3678 // spaceBetween: -50, 3679 }, 3680 3681 425: { 3682 slidesPerView: 1, 3683 // spaceBetween: -100, 3684 }, 3685 640: { 3686 slidesPerView: 2, 3687 spaceBetween: 16, 3688 autoHeight: true, 3689 }, 3690 768: { 3691 slidesPerView: 2, 3692 spaceBetween: 20, 3693 }, 3694 992: { 3695 slidesPerView: 3, 3696 spaceBetween: 20, 3697 }, 3698 1268: { 3699 slidesPerView: 3, 3700 spaceBetween: 20, 3701 }, 3702 1445: { 3703 slidesPerView: 3, 3704 spaceBetween: 30, 3705 } 3706 }, 3707 3708 on: { 3709 3710 }, 3711 }); 3712 }); 3713 } 3714 } 3715 3716 initSlidersProg(); 3717 // function initSlidersEx() { 3718 3719 // // СпиÑок ÑлайдеÑÑв 3720 // // ÐеÑевÑÑÑÑмо, Ñи Ñ ÑÐ»Ð°Ð¹Ð´ÐµÑ Ð½Ð° ÑÑоÑÑнÑÑ 3721 // if (document.querySelector('.exhibition-news__slider')) { // ÐказÑÑмо ÑÐºÐ»Ð°Ñ Ð¿Ð¾ÑÑÑбного ÑлайдеÑа 3722 // // СÑвоÑÑÑмо ÑÐ»Ð°Ð¹Ð´ÐµÑ 3723 // new Swiper('.exhibition-news__slider', { // ÐказÑÑмо ÑÐºÐ»Ð°Ñ Ð¿Ð¾ÑÑÑбного ÑлайдеÑа 3724 // // ÐÑдклÑÑаÑмо модÑÐ»Ñ ÑлайдеÑа 3725 // // Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного Ð²Ð¸Ð¿Ð°Ð´ÐºÑ 3726 // modules: [Navigation, Scrollbar], 3727 // observer: true, 3728 // observeParents: true, 3729 // slidesPerView: 3, 3730 // spaceBetween: -16, 3731 // speed: 800, 3732 // centeredSlidesBounds: true, 3733 // //touchRatio: 0, 3734 // //simulateTouch: false, 3735 // // loop: true, 3736 // //preloadImages: false, 3737 // //lazy: true, 3738 3739 // /* 3740 // // ÐÑекÑи 3741 // effect: 'fade', 3742 // autoplay: { 3743 // delay: 3000, 3744 // disableOnInteraction: false, 3745 // }, 3746 // */ 3747 3748 // // ÐагÑнаÑÑÑ 3749 // /* 3750 // pagination: { 3751 // el: '.swiper-pagination', 3752 // clickable: true, 3753 // }, 3754 // */ 3755 3756 // // СкÑÐ¾Ð»Ð»Ð±Ð°Ñ 3757 3758 // scrollbar: { 3759 // el: '.swiper_scrollbar-1', 3760 // draggable: true, 3761 // dragSize: 100, 3762 // }, 3763 3764 3765 // // Ðнопки "влÑво/впÑаво" 3766 // navigation: { 3767 // prevEl: '.swiper-button-prev', 3768 // nextEl: '.swiper-button-next', 3769 // }, 3770 3771 // // ÐÑейкпоÑнÑи 3772 // breakpoints: { 3773 // 320: { 3774 // slidesPerView: 1, 3775 // spaceBetween: -40, 3776 // }, 3777 // 350: { 3778 // slidesPerView: 1, 3779 // spaceBetween: -50, 3780 // }, 3781 3782 // 425: { 3783 // slidesPerView: 1, 3784 // spaceBetween: -100, 3785 // }, 3786 // 640: { 3787 // slidesPerView: 2, 3788 // spaceBetween: 16, 3789 // autoHeight: true, 3790 // }, 3791 // 768: { 3792 // slidesPerView: 2, 3793 // spaceBetween: 20, 3794 // }, 3795 // 992: { 3796 // slidesPerView: 2, 3797 // spaceBetween: 20, 3798 // }, 3799 // 1268: { 3800 // slidesPerView: 2, 3801 // spaceBetween: 45, 3802 // }, 3803 // 1445: { 3804 // slidesPerView: 3, 3805 // spaceBetween: 30, 3806 // } 3807 // }, 3808 3809 // // ÐодÑÑ 3810 // on: { 3811 3812 // } 3813 // }); 3814 // } 3815 3816 3817 // } 3818 // initSlidersEx() ; 3819 // function initSlidersNe() { 3820 3821 // // СпиÑок ÑлайдеÑÑв 3822 // // ÐеÑевÑÑÑÑмо, Ñи Ñ ÑÐ»Ð°Ð¹Ð´ÐµÑ Ð½Ð° ÑÑоÑÑнÑÑ 3823 // if (document.querySelector('.news-othet__slide')) { // ÐказÑÑмо ÑÐºÐ»Ð°Ñ Ð¿Ð¾ÑÑÑбного ÑлайдеÑа 3824 // // СÑвоÑÑÑмо ÑÐ»Ð°Ð¹Ð´ÐµÑ 3825 // new Swiper('.news-othet__slide', { // ÐказÑÑмо ÑÐºÐ»Ð°Ñ Ð¿Ð¾ÑÑÑбного ÑлайдеÑа 3826 // // ÐÑдклÑÑаÑмо модÑÐ»Ñ ÑлайдеÑа 3827 // // Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного Ð²Ð¸Ð¿Ð°Ð´ÐºÑ 3828 // modules: [Navigation, Scrollbar], 3829 // observer: true, 3830 // observeParents: true, 3831 // slidesPerView: 4, 3832 // spaceBetween: -16,
3833 // speed: 800, 3834 // centeredSlidesBounds: true, 3835 // //touchRatio: 0, 3836 // //simulateTouch: false, 3837 // // loop: true, 3838 // //preloadImages: false, 3839 // //lazy: true, 3840 3841 // /* 3842 // // ÐÑекÑи 3843 // effect: 'fade', 3844 // autoplay: { 3845 // delay: 3000, 3846 // disableOnInteraction: false, 3847 // }, 3848 // */ 3849 3850 // // ÐагÑнаÑÑÑ 3851 // /* 3852 // pagination: { 3853 // el: '.swiper-pagination', 3854 // clickable: true, 3855 // }, 3856 // */ 3857 3858 // // СкÑÐ¾Ð»Ð»Ð±Ð°Ñ 3859 3860 // scrollbar: { 3861 // el: '.swiper_scrollbar-2', 3862 // draggable: true, 3863 // dragSize: 100, 3864 // }, 3865 3866 3867 // // Ðнопки "влÑво/впÑаво" 3868 // navigation: { 3869 // prevEl: '.swiper-button-prev', 3870 // nextEl: '.swiper-button-next', 3871 // }, 3872 3873 // // ÐÑейкпоÑнÑи 3874 // breakpoints: { 3875 // 320: { 3876 // slidesPerView: 1, 3877 // spaceBetween: 20, 3878 // }, 3879 3880 // 425: { 3881 // slidesPerView: 1, 3882 // spaceBetween: 20, 3883 // }, 3884 // 640: { 3885 // slidesPerView: 2, 3886 // spaceBetween: 16, 3887 // autoHeight: true, 3888 // }, 3889 // 768: { 3890 // slidesPerView: 2, 3891 // spaceBetween: 20, 3892 // }, 3893 // 992: { 3894 // slidesPerView: 2, 3895 // spaceBetween: 20, 3896 // }, 3897 // 1268: { 3898 // slidesPerView: 2, 3899 // spaceBetween: 45, 3900 // }, 3901 // 1445: { 3902 // slidesPerView: 3, 3903 // spaceBetween: 30, 3904 // } 3905 // }, 3906 3907 // // ÐодÑÑ 3908 // on: { 3909 3910 // } 3911 // }); 3912 // } 3913 3914 3915 // } 3916 3917 3918 3919 // initSlidersNe(); 3920 window.addEventListener("load", (function(e) {})); 3921})(); 3922// function initSliderState() { 3923// const sliders = document.querySelectorAll('.state-symbols__slider'); 3924 3925// if (sliders.length > 0) { 3926// sliders.forEach((slider, index) => { 3927// const swiper = new Swiper(slider, { 3928// observer: true, 3929// observeParents: true, 3930// slidesPerView: 3, 3931// slidesPerGroup: 3, // ÐÑпÑавлено: бÑло slidesPerViewGroup 3932// spaceBetween: 20, 3933// speed: 600, 3934// centeredSlides: false, 3935// loop: sliders.length > 3, // ÐклÑÑаем беÑконеÑнÑй Ñежим, еÑли болÑÑе 3 Ñлайдов 3936// allowTouchMove: sliders.length > 3, // ÐапÑеÑаем Ñвайп, еÑли Ñлайдов менÑÑе 3 3937// breakpoints: { 3938// 320: { 3939// slidesPerView: 3, 3940// spaceBetween: 10, 3941// }, 3942// 1445: { 3943// slidesPerView: 3, 3944// spaceBetween: 30, 3945// } 3946// } 3947// }); 3948// }); 3949// } 3950// } 3951// initSliderState();
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.