PageSourceSearch

https://mirzamak.by/assets/front/js/sliderSwiper.js

js mirzamak.by collected 2026-10-02 04:38:22 UTC 188,062 bytes, 3,951 lines download raw bytes

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.